Unterschied zwischen JAX-RS und Spring Rest

137

Ich habe mit dem Unterschied zwischen JAX-RS (naja, vielleicht sollte Jersey zum Vergleich verwendet werden, da JAX-RS nur eine Spezifikation ist) und Spring for Restful-Diensten verwechselt . Ich habe versucht, online nach weiteren Informationen zu suchen, und es wurde verwirrender. Mein Unternehmen verwendet Spring MVC, um Restful APIs zu entwickeln

Der verwirrende Teil ist, JAX-RS steht für Java API für RESTful Web Services . Im Frühjahr verwende ich auch Java, um RESTful Web Services zu entwickeln, sodass ich die Unterschiede nicht wirklich verstehe. Entspricht Spring den JAX-RS-Spezifikationen?

Nach dem, was ich bis jetzt weiß:

  1. JAX-RS ist eine Blaupause / Spezifikation, es hat Jersey, RESTeasy usw. als Implementierungen.
Hades
quelle
@ CássioMazzochiMolin danke für deine Antwort, ich werde es in einer Weile noch akzeptieren, noch eine Frage, du hast erwähnt, dass das Spring Framework keine JAX-RS-Implementierung ist, welcher Spezifikation folgt Spring? Danke
Hades
3
Es wird keine bestimmte Spezifikation implementiert. Es ist nur die Frühlingsmethode, um die Dinge zu tun. REST-Funktionen werden von dem spring-webmvcModul bereitgestellt , das auch den Model-View-Controller des Spring bereitstellt.
Cassiomolin

Antworten:

149

JAX-RS

JAX-RS ist eine Spezifikation zur Implementierung von REST-Webdiensten in Java, die derzeit vom JSR-370 definiert wird . Es ist Teil der Java EE-Technologien , die derzeit im JSR 366 definiert sind .

Jersey (im Lieferumfang von GlassFish und Payara enthalten) ist die JAX-RS-Referenzimplementierung. Es gibt jedoch auch andere Implementierungen wie RESTEasy ( im Lieferumfang von JBoss EAP und WildFly enthalten) und Apache CXF (im Lieferumfang von TomEE und WebSphere enthalten).

Frühlingsrahmen

Das Spring Framework ist ein vollständiges Framework , mit dem Sie Java-Unternehmensanwendungen erstellen können. Die REST-Funktionen werden vom Spring MVC- Modul bereitgestellt (dasselbe Modul, das Funktionen für die Modellansichtssteuerung bereitstellt ). Es ist keine JAX-RS-Implementierung und kann als Spring-Alternative zum JAX-RS-Standard angesehen werden.

Das Spring-Ökosystem bietet auch eine breite Palette von Projekten zum Erstellen von Unternehmensanwendungen, darunter Persistenz, Sicherheit, Integration in soziale Netzwerke, Stapelverarbeitung usw.

Beispiele

Betrachten Sie den folgenden Ressourcencontroller, der die JAX-RS-API verwendet:

@Path("/greetings")
public class JaxRsController {

    @GET
    @Path("/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public Response greeting(@PathParam("name") String name) {

        String greeting = "Hello " + name;
        return Response.ok(greeting).build();
    }
}

Die entsprechende Implementierung unter Verwendung der Spring MVC-API wäre:

@RestController
@RequestMapping("/greetings")
public class SpringRestController {

    @RequestMapping(method = RequestMethod.GET,
                    value = "/{name}", 
                    produces = MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<?> greeting(@PathVariable String name) {

        String greeting = "Hello " + name;
        return new ResponseEntity<>(greeting, HttpStatus.OK);
    }
}

Verwenden von Spring Boot und Jersey

Spring Boot bietet das spring-boot-starter-jerseyModul, mit dem Sie das JAX-RS-Programmiermodell für die REST-Endpunkte anstelle von Spring MVC verwenden können. Es funktioniert ganz gut mit Jersey 2.x.

Ein vollständiges Beispiel zum Erstellen einer Webanwendung mit Jersey 2.x und Spring Boot 1.4.x finden Sie in dieser Antwort .

Cassiomolin
quelle
Müssen wir die Jax-Rs-Implementierungen auf dem Server deaktivieren, wenn wir Spring MVC verwenden und in GlassFish / Payara einsetzen?
Pradeep_Evol
Stimmt dieser Artikel mit Spring 4 dzone.com/articles/… ? Ist Spring Web besser für ResT-Webdienste als nur Spring + Jersey (JAX-RS)?
Tgkprog
58

Anmerkungsunterschiede

(Stand 2018) Spring MVC wurde nicht auf JAX-RS-Annotationen standardisiert, da seine Lösung älter ist als JAX-RS. Hier sind die Äquivalente:

Geben Sie hier die Bildbeschreibung ein

https://stormpath.com/blog/jax-rs-vs-spring-rest-endpoints

Wenn Sie nicht standardisierte APIs verwenden, sollten Sie erwarten, dass diese in einigen Jahren veraltet sind und möglicherweise durch eine neuere experimentelle API ersetzt werden. Die Abwärtskompatibilität ist viel weniger verantwortlich (z. B. wenn neue JDK-Versionen veröffentlicht werden).

Sridhar Sarnobat
quelle
Vielen Dank, das ist großartig
Bejond
26

Ich habe sowohl mit Jersey Rest als auch mit Spring Rest und Jersey Rest mit Spring gearbeitet. Beide sind sehr umfangreiche Frameworks mit schönen Implementierungen. Ich würde vorschlagen, dass es besser ist, Spring Rest zu verwenden, wenn Sie andere Spring-Dienste wie ORM, Spring Security und DI usw. verwenden. Beide sind Spring-Bibliotheken, daher finde ich das Verwalten von Code und Abhängigkeiten ein wenig einfach

JAX-RS-Profis:

  • JSR-Standard kann ohne Servlet-Container ausgeführt werden (Grizzly, einfach, ...)
  • Produktionsbereite Implementierungen (Jersey, CXF, Resteasy, Restlet, ...), die nur für REST-Anwendungen entwickelt wurden

MVC-Profis im Frühjahr:

  • Stellen Sie "vollen" Stapel bereit, nicht nur REST-Einrichtungen

  • Abhängigkeitsinjektion / AOP / Transaktionen

  • Pluggable View-Vorlagen (JSP, Freemarker, Velocity, ...)

Weitere Informationen finden Sie unter den folgenden Links

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Warum JAX-RS / Jersey verwenden?
Midhun Pottammal
quelle
4
JAX-RS kann jedoch auch mit Spring (für DI, AOP, ...) verwendet werden.
Deamon
5

JAX-RS ist die Spezifikation und Trikot usw. sind seine Implementierung. Die Leute verwenden Spring, um RestFul-Webdienste zu erstellen, da Spring zusammen mit einer erholsamen Implementierung Dinge wie die Integration in den Ruhezustand und auch Dinge wie IOC und aspektorientierte Programmierung bietet.

Wenn wir für unsere Implementierung Trikot verwenden, besteht das Problem darin, dass die Daten mithilfe einiger ORM-Technologien vom Back-End abgerufen werden müssen und wir dafür Boilerplate-Code schreiben müssen.

Dies ist der Grund, warum Menschen und sogar Unternehmen Spring verwenden, da es neben der Rest-Implementierung auch Spring-Einrichtungen bietet. Mit der neuesten Spring-Boot-Implementierung können wir jetzt ohne viele Konfigurationen sehr schnell mit der Entwicklung beginnen.

Rahul Singh
quelle