Auswahl einer JAX-RS-Implementierung für ein neues Projekt

35

Ich starte ein neues Java-Projekt, für das eine RESTful-API erforderlich ist. Es wird eine SaaS-Geschäftsanwendung sein, die mobile Kunden bedient.

Ich habe ein Projekt mit Java EE 6 entwickelt, bin aber mit dem Ökosystem nicht sehr vertraut, da ich den größten Teil meiner Erfahrung auf der Microsoft-Plattform habe.

Was wäre eine sinnvolle Wahl für eine JAX-RS-Implementierung für ein neues Projekt wie beschrieben?

Gemessen an der Wikipedia-Liste scheinen die Hauptkonkurrenten Jersey, Apache CXF, RESTeasy und Restlet zu sein. Der auf Wikipedia zitierte Vergleich der JAX-RS-Implementierungen stammt jedoch aus dem Jahr 2008.

Meine ersten Eindrücke von ihren jeweiligen Homepages sind:

  • CXF soll eine sehr umfassende Lösung sein (erinnert mich an WCF im Microsoft-Bereich), bei der ich denke, dass das Verstehen, Einrichten und Debuggen komplexer sein kann als das, was ich benötige.
  • Jersey ist die Referenzimplementierung und könnte eine gute Wahl sein, aber es ist ein Erbe von Sun und ich bin nicht sicher, wie Oracle damit umgeht (Ankündigungsseite funktioniert nicht und letzte Festschreibungsmitteilung ist von vor 4 Monaten);
  • RESTeasy stammt von JBoss und ist wahrscheinlich eine gute Option, obwohl ich mir nicht sicher bin, wie ich es lernen soll.
  • Restlet scheint beliebt zu sein, hat aber eine Menge Geschichte. Ich bin mir nicht sicher, wie aktuell es in der Java EE 6-Welt ist oder ob es eine starke J2EE-Denkweise aufweist (wie viele XML-Konfigurationen).

Was wären die Vorzüge jeder dieser Alternativen? Was ist mit Lernkurve? Funktionsunterstützung? Tools (z. B. NetBeans- oder Eclipse-Assistenten)? Wie sieht es mit der einfachen Fehlersuche und Bereitstellung aus? Ist eines dieser Projekte aktueller als die anderen? Wie stabil sind sie?

Fernando Correia
quelle
1
Ich schätze die Titelbearbeitung, frage mich aber nicht wirklich, ob JAX-RS für ein mobiles Projekt geeignet ist. das wäre eine andere frage. Ich versuche herauszufinden, welche JAX-RS-Implementierung empfohlen wird.
Fernando Correia

Antworten:

22

Ich habe Dropwizard für eine Gesamtlösung geliebt

Anstatt sich für einen riesigen Anwendungscontainer zu entscheiden, empfiehlt Dropwizard eine schlanke Lösung, die viel schnellere Entwicklungszyklen bietet. Im Wesentlichen liefert es den Klebstoff für die folgenden bekannten Frameworks:

  • Anlegesteg (HTTP)
  • Jersey (JAX-RS)
  • Jackson (JSON oder XML)
  • Guava (hervorragende Ergänzung zu JDK-Bibliotheken)
  • Metriken (Echtzeit-Anwendungsüberwachung)
  • Hibernate Validator (Eingabeüberprüfung)
  • OAuth (RESTful Authentifizierung)

Die Kombination der oben genannten Aspekte in Verbindung mit einem soliden Ansatz für Funktionstests bietet eine umfassende Lösung, um Ihren Service schnell einsatzbereit zu machen.

Ja? Und die JAX-RS-Frage, die ich gestellt habe ...

Sie werden feststellen, dass sie Jersey als Referenz für die JAX-RS-Implementierung ausgewählt haben. Als RESTEasy-Typ dachte ich, das wäre ein Problem, aber es gab keine Lernkurve. Die beiden sind weitgehend austauschbar. Ich würde jedoch sagen, dass der Jersey-Client eine flüssige Oberfläche für die Erstellung von Tests anbot. Ein Beispiel wäre ...

 @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
quelle
2
Vielen Dank, dass Sie Dropwizard auf mich aufmerksam gemacht haben. Ich wusste nichts davon und es scheint sehr gut zu meinen Bedürfnissen zu passen. Es sieht gut durchdacht, praktisch und bodenständig aus und könnte mir wahrscheinlich eine Menge Ärger ersparen und mir dabei helfen, eine viel bessere Lösung zu entwickeln, als ich meine oberflächlichen Kenntnisse der Java EE-Plattform vermitteln könnte. Und von einem erfolgreichen Unternehmen wie Yammer zu kommen, das den Unternehmensmarkt bedient, ist definitiv ein Plus. Nochmals vielen Dank.
Fernando Correia
1
Kein Problem. Ich habe über ein Projekt von mir gebloggt, das viele der Dropwizard-Funktionen demonstriert. Es steht unter MIT-Lizenz. Sie können es also nach Bedarf verwenden: gary-rowe.com/agilestack/2012/06/06/…
Gary Rowe
Das wird helfen Sehr geschätzt.
Fernando Correia
1
Ich war bereits geneigt, Jackson, Guava, Validator und OAuth zu verwenden, also sieht das aus wie ein Kinderspiel ... Danke.
PhiLho
Warnung: Jersey 2.0 ist wesentlich schlechter als 1.0. Es fehlt die Funktionalität, die früher in 1.0 vorhanden war, es erzwingt ein bestimmtes DI-Framework für Sie und die Community-Unterstützung ist viel schlechter als früher.
Gili
6

Sie können sich diese Frage ansehen , in der einige Erfahrungen anderer Entwickler diskutiert werden.

Ich kann Jersey persönlich weiterempfehlen. Es ist sehr einfach zu bedienen und hat eine gute Anhängerschaft, da es die Referenzimplementierung ist. Dies bedeutet auch, dass es für die nächste Weile gewartet und unterstützt wird.

Oleksi
quelle
1
Vielen Dank für Ihre hilfreiche Antwort und für den Link zu dieser verwandten Frage - seltsamerweise ist sie bei der Suche nicht aufgetaucht . Diese Antwort stammt jedoch aus dem Jahr vor vier Jahren. Ich freue mich über Ihre aktuelle Empfehlung.
Fernando Correia