Wybór implementacji JAX-RS dla nowego projektu

35

Zaczynam nowy projekt Java, który będzie wymagał RESTful API. Będzie to aplikacja biznesowa SaaS obsługująca klientów mobilnych.

Opracowałem jeden projekt z Javą EE 6, ale nie znam się zbytnio na ekosystemie, ponieważ większość mojego doświadczenia dotyczy platformy Microsoft.

Jaki byłby rozsądny wybór dla implementacji JAX-RS dla nowego projektu, takiego jak opisany?

Sądząc z listy Wikipedii , głównymi pretendentami wydają się Jersey, Apache CXF, RESTeasy i Restlet. Jednak porównanie implementacji JAX-RS cytowanych na Wikipedii pochodzi z 2008 roku.

Moje pierwsze wrażenia z ich stron głównych to:

  • CXF ma być bardzo kompleksowym rozwiązaniem (przypomina mi WCF w przestrzeni Microsoft), co sprawia, że ​​uważam, że zrozumienie, konfiguracja i debugowanie może być bardziej skomplikowane niż to, czego potrzebuję;
  • Jersey jest implementacją referencyjną i może być dobrym wyborem, ale jest dziedzictwem firmy Sun i nie jestem pewien, jak Oracle ją traktuje (strona ogłoszeń nie działa i ostatnie powiadomienie o zatwierdzeniu pochodzi sprzed 4 miesięcy);
  • RESTeasy pochodzi od JBossa i prawdopodobnie jest to solidna opcja, chociaż nie jestem pewien co do krzywej uczenia się;
  • Restlet wydaje się być popularny, ale ma wiele historii, nie jestem pewien, jak aktualny jest w świecie Java EE 6 lub czy niesie za sobą ciężkie nastawienie J2EE (jak wiele konfiguracji XML).

Jakie byłyby zalety każdej z tych alternatyw? Co z krzywą uczenia się? Wsparcie funkcji? Oprzyrządowanie (np. NetBeans lub wizard Eclipse)? Co z łatwością debugowania, a także wdrażania? Czy któryś z tych projektów jest bardziej aktualny niż inne? Jak stabilne są?

Fernando Correia
źródło
1
Doceniam edycję tytułu, ale tak naprawdę nie pytam, czy JAX-RS pasuje do projektu mobilnego; to byłoby inne pytanie. Próbuję dowiedzieć się, która implementacja JAX-RS byłaby zalecana.
Fernando Correia,

Odpowiedzi:

22

Uwielbiam Dropwizard za ogólne rozwiązanie

Dropwizard opowiada się za lekkim rozwiązaniem, które oferuje znacznie szybsze cykle programowania. Zasadniczo zapewnia klej do następujących dobrze znanych ram:

  • Molo (HTTP)
  • Jersey (JAX-RS)
  • Jackson (JSON lub XML)
  • Guawa (doskonałe dodatki do bibliotek JDK)
  • Metryki (monitorowanie aplikacji w czasie rzeczywistym)
  • Hibernacja Walidator (weryfikacja danych wejściowych)
  • OAuth (uwierzytelnianie RESTful)

Połączenie powyższego, w połączeniu z solidnym podejściem do testów funkcjonalnych, daje kompletne rozwiązanie do szybkiego uruchomienia usługi.

Tak? I pytanie JAX-RS, które zadałem ...

Zauważysz, że wybrali Jersey, referencyjną implementację JAX-RS. Jako RESTEasy, pomyślałem, że to będzie problem, ale krzywa uczenia się była zerowa. Te dwa są w dużej mierze wymienne. Powiedziałbym jednak, że klient Jersey oferuje płynny interfejs do konstruowania testów. Przykładem może być ...

 @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());

}
Gary Rowe
źródło
2
Dziękuję bardzo za zwrócenie mojej uwagi na Dropwizarda. Nie wiedziałem o tym i wydaje się, że bardzo dobrze pasuje do moich potrzeb. Wygląda dobrze przemyślany, praktyczny i praktyczny i prawdopodobnie może zaoszczędzić mi wielu kłopotów, pomagając mi jednocześnie w opracowaniu znacznie lepszego rozwiązania, niż mógłbym sobie wyobrazić na temat mojej wiedzy na temat platformy Java EE. A pochodząca od odnoszącej sukcesy firmy takiej jak Yammer, która obsługuje rynek korporacyjny, jest zdecydowanie plusem. Jeszcze raz wielkie dzięki.
Fernando Correia,
1
Nie ma problemu. Napisałem na blogu o moim projekcie, który demonstruje wiele funkcji Dropwizard. Jest objęty licencją MIT, więc możesz swobodnie korzystać z niej tak, jak potrzebujesz: gary-rowe.com/agilestack/2012/06/06/…
Gary Rowe
To pomoże. Bardzo mile widziane.
Fernando Correia,
1
Już skłaniałem się do korzystania z Jacksona, Guavy, Validatora i OAuth, więc wygląda to na oczywiste ... Dzięki.
PhiLho
Ostrzeżenie: Jersey 2.0 jest znacznie gorszy niż 1.0. Brakuje funkcjonalności, która istniała w wersji 1.0, wymusza na tobie specyficzne środowisko DI, a wsparcie społeczności jest znacznie gorsze niż kiedyś.
Gili
6

Możesz rzucić okiem na to pytanie , które omawia niektóre doświadczenia innych programistów.

Mogę osobiście polecić Jersey. Jest bardzo łatwy w użyciu i ma dobrą opinię, ponieważ jest implementacją referencyjną. Oznacza to również, że będzie on utrzymywany i obsługiwany przez następną chwilę.

Oleksi
źródło
1
Dziękujemy za pomocną odpowiedź i link do tego powiązanego pytania - co dziwne, nie pojawił się w wyszukiwaniu . Ta odpowiedź pochodzi z 4 lat temu, więc doceniam waszą aktualną rekomendację.
Fernando Correia,