Ist für REST-konforme Dienste in Java JAX-RS besser als ein MVC-Framework wie Swing, Grails oder Play?

8

Zum Beispiel unterstützt Play-Framework RESTful-Dienste wie folgt: RESTful on Play! Rahmen

Wie ist das im Vergleich zu Jax-RS Jersey-Implementierung? Läuft ein Framework wie Play um Jersey herum, wegen all der coolen Schnickschnacks und REST?

Entwicklerproduktivität ist wichtig, aber auch eine korrekte Implementierung. Vielleicht ist die Verwendung eines MVC-Frameworks für REST-Dienste "falsch"?

Beachten Sie, nur RESTful-Dienste, keine UI-Komponenten.

    
jsidlosky 01.07.2011, 16:39
quelle

3 Antworten

11

Obwohl es nicht "falsch" ist, ein MVC-Framework für REST-konforme Dienste zu verwenden, gibt es einige Vor- und Nachteile im Vergleich zur Verwendung einer JAX-RS-Implementierung.

(Haftungsausschluss: Ich habe Jersey und Play nur aus Spaß und nicht auf Produktionssystemen verwendet, daher habe ich meine Kommentare allgemeiner auf MVC vs. JAX-RS zugeschnitten. Beachten Sie, dass dies allgemeine Verallgemeinerungen sind. )

MVC-Frameworks - zumindest diejenigen, die als entwicklerfreundlich und "clever" betrachtet werden - ersparen Ihnen in der Regel die Erstellung einer Persistenzschicht (das Modell ). Die meisten vereinfachen auch das "Weiterleiten" von Anfragen entweder unter Verwendung von Scaffolding über Konvention oder irgendeine Form von Konfiguration. Die Nachteile sind, dass Sie einige Konventionen für Ihre Controller einhalten müssen und in der Regel für jede Ressource eine Ansicht schreiben müssen (oder Schichten von Abstraktionen erstellen, um das Umschreiben desselben Codes zu vermeiden).

JAX-RS zeichnet sich durch die Definition des Routings aus (unter Verwendung von Java-Annotationen) sowie durch die Beseitigung von Einschränkungen für die Serviceklasse. Nach meiner Erfahrung hat dies die Menge an Standardcode und Entwickleraufwand erheblich reduziert. Jersey und Apache CXF verarbeiten auch die XML- oder JSON-Serialisierung mithilfe von JAXB-Annotationen, wodurch die Ansicht in einem MVC-Kontext nicht mehr ermittelt werden muss. Der Nachteil hier ist, dass Sie Ihre eigene ORM- oder Persistenzschicht herausfinden müssen, was gut oder schlecht sein kann, abhängig davon, ob Sie auf vorhandenen Daten aufbauen oder ein Greenfield-System erstellen (oder etwas anderes als ein JPA / RDBMS verwenden) zB NoSQL Datenspeicher).

Mein persönlicher Kommentar: Spielen! ist ein wirklich cooler Rahmen, aber ich würde CXF (oder Jersey) über ein MVC-Framework jeden Tag für den Aufbau eines RESTful Service wählen. Meiner Erfahrung nach gibt dies den Entwicklern die Möglichkeit, sich auf die für den Service benötigte Logik zu konzentrieren, und eröffnet Optionen für verschiedene Datenbankansätze. Richtiges Werkzeug für den richtigen Job.

    
nafisto 11.07.2011, 17:11
quelle
6

Als Faustregel gilt: Verwenden Sie für Scala Play. Für Java verwenden Sie Jersey.

Sie können Jersey / Scala und Play / Java verwenden; Ich habe beides gemacht. Es klappt. Es ist nicht schlecht. Aber wenn Sie nicht einen bestimmten Grund dafür haben, würde ich Ökosysteme nicht mischen. Java und Scala sind interoperabel, aber sie haben unterschiedliche Ökosysteme. Ich würde es vermeiden, Java-Ismen hinzuzufügen, wenn Sie Scala oder Scala-Ismen und Abhängigkeiten verwenden, wenn Sie Java direkt ausführen.

Jersey und Play sind in der Regel in der Nähe von REST-Diensten. Weder hat wirklich irgendwelche Killer-Features über die anderen.

Jersey definiert URL-Zuordnungen in Anmerkungen, Play definiert sie in einer dienstweiten Routendatei. Und sie bündeln oder haben eine unterschiedliche Qualität der Integration mit verschiedenen Bibliotheken für Dinge wie XML, JSON, Datenbank, Tests, Mocking, Dependency-Injection-Bibliotheken und App-Server-Bereitstellung.

Die Java-Welt hat JMS, Spring, JUnit, Jdbi / Hibernate / Jpa, Jetty / Grizzly. Die Scala-Welt hat Akka, Specs2 / ScalaTest, Anorm / Slick. Jersey passt besser in die erste Welt, Scala in die zweite. Sie können das auf jeden Fall durchkreuzen, aber es wird ein wenig weniger elegant und erfordert möglicherweise mehr Klebstoff-Codierung.

    
user2684301 27.04.2014 00:19
quelle
1

JAX-RS ist ein Standard und Implementierungen können von verschiedenen Herstellern erstellt werden. Jersey ist eine solche Implementierung. Die anderen Frameworks können JAX-RS verwenden, sind aber keine Standards. Es ist also kein Eins-zu-eins-Vergleich.

Ich habe noch nie zuvor von Play gehört, aber es sieht interessant aus, eher wie Rails und Django als Jersey. Was ich an Jersey mag, ist, dass es in bestehende Java-Webanwendungen integriert werden kann, indem einfach die JARs hinzugefügt und einige Dinge in der web.xml deklariert werden. Was ich bei Jersey und JAX-RS verwirrend finde, ist das Routing.

Play scheint das Routing einfacher zu machen, korrigiert mich jedoch, wenn ich falsch liege, es scheint, als sei es ein Alles-oder-Nichts-Framework und kann nicht zusammen mit anderen Servlets in derselben Webanwendung verwendet werden.

    
kwo 02.07.2011 07:25
quelle