Выбор реализации JAX-RS для нового проекта

35

Я начинаю новый проект Java, который потребует RESTful API. Это будет бизнес-приложение SaaS, обслуживающее мобильных клиентов.

Я разработал один проект с Java EE 6, но я не очень знаком с экосистемой, так как большая часть моего опыта на платформе Microsoft.

Что было бы разумным выбором для реализации JAX-RS для нового проекта, такого как описанный?

Судя по списку Википедии , основными претендентами, похоже, являются Джерси, Apache CXF, RESTeasy и Restlet. Но Сравнение Реализаций JAX-RS, приведенное в Википедии, дано с 2008 года.

Мои первые впечатления от соответствующих домашних страниц:

  • CXF стремится быть очень всеобъемлющим решением (напоминает мне WCF в пространстве Microsoft), что заставляет меня думать, что его может быть сложнее понять, настроить и отладить, чем мне нужно;
  • Jersey является эталонной реализацией и может быть хорошим выбором, но он унаследован от Sun, и я не уверен, как к нему относится Oracle (страница объявлений не работает, а уведомление о последнем коммите получено 4 месяца назад);
  • RESTeasy от JBoss и, вероятно, хороший вариант, хотя я не уверен насчет кривой обучения;
  • Рестлет, кажется, популярен, но имеет большую историю, я не уверен, насколько он актуален в мире Java EE 6 или имеет ли он тяжелое мышление J2EE (например, множество конфигураций XML).

Каковы будут преимущества каждой из этих альтернатив? Как насчет кривой обучения? Поддержка функций? Инструменты (например, мастера NetBeans или Eclipse)? Как насчет простоты отладки, а также развертывания? Является ли какой-либо из этих проектов более современным, чем другие? Насколько они стабильны?

Фернандо Коррейя
источник
1
Я ценю редактирование заголовка, но я не спрашиваю, подходит ли JAX-RS для мобильного проекта; это был бы другой вопрос. Я пытаюсь выяснить, какая реализация JAX-RS будет рекомендована.
Фернандо Коррейя

Ответы:

22

Я полюбил Dropwizard для общего решения

Вместо того чтобы использовать какой-то огромный подход к контейнеру приложений, Dropwizard предлагает легковесное решение, которое предлагает гораздо более быстрые циклы разработки. По сути, он обеспечивает клей для следующих хорошо известных структур:

  • Причал (HTTP)
  • Джерси (JAX-RS)
  • Джексон (JSON или XML)
  • Гуава (отличные дополнения к библиотекам JDK)
  • Метрики (мониторинг приложений в реальном времени)
  • Hibernate Validator (проверка ввода)
  • OAuth (RESTful-аутентификация)

Сочетание вышеперечисленного в сочетании с надежным подходом к функциональному тестированию дает комплексное решение для быстрого запуска и запуска вашего сервиса.

Да? И вопрос JAX-RS, который я задал ...

Вы заметите, что они выбрали Джерси, эталонную реализацию JAX-RS. Будучи RESTEasy парнем, я думал, что это будет проблемой, но кривая обучения была нулевой. Эти два в значительной степени взаимозаменяемы. Тем не менее, я бы сказал, что клиент из Джерси предлагает свободный интерфейс для создания тестов. Примером будет ...

 @Override
  protected void setUpResources() {
    addResource(new HelloWorldResource("Hello, %s!","Stranger"));

    setUpAuthenticator();
  }

  @Test
  public void simpleResourceTest() throws Exception {

    Saying expectedSaying = new Saying(1,"Hello, Stranger!");

    Saying actualSaying = client()
      .resource("/hello-world")
      .get(Saying.class);

    assertEquals("GET hello-world returns a default",expectedSaying.getContent(),actualSaying.getContent());

}
Гэри Роу
источник
2
Большое спасибо за то, что вы привлекли Dropwizard к моему вниманию. Я не знал об этом, и это, кажется, соответствует моим потребностям очень хорошо. Он выглядит хорошо продуманным, практичным и практичным, и, вероятно, может спасти меня от многих неприятностей, помогая мне создать гораздо лучшее решение, чем я мог бы, если бы у меня были поверхностные знания о платформе Java EE. И прибытие из успешной компании, такой как Yammer, которая обслуживает корпоративный рынок, безусловно, является плюсом. Еще раз большое спасибо.
Фернандо Коррейя
1
Нет проблем. Я написал в блоге о моем проекте, который демонстрирует многие функции Dropwizard. Он находится под лицензией MIT, поэтому не стесняйтесь использовать по мере необходимости: gary-rowe.com/agilestack/2012/06/06/…
Гари Роу
Это поможет Очень признателен.
Фернандо Коррейя
1
Я уже склонялся к использованию Джексона, Гуавы, Валидатора и OAuth, так что это похоже на легкую задачу ... Спасибо.
Фил
Предупреждение: Джерси 2.0 существенно хуже, чем 1.0. В ней отсутствует функциональность, которая раньше существовала в 1.0, она навязывает вам определенную структуру DI, а поддержка сообщества намного хуже, чем раньше.
Гили
6

Вы можете взглянуть на этот вопрос , в котором обсуждается опыт других разработчиков.

Я могу лично рекомендовать Джерси. Он очень прост в использовании, и у него есть хорошие последователи, потому что это эталонная реализация. Это также означает, что он будет поддерживаться и поддерживаться в течение следующего времени.

Oleksi
источник
1
Спасибо за ваш полезный ответ и за ссылку на этот связанный вопрос - странно, он не появился в поиске . Тем не менее, этот ответ был получен 4 года назад, поэтому я ценю вашу актуальную рекомендацию.
Фернандо Коррейя