164 votes

Différence entre JAX-RS et Spring Rest

J'ai confondu avec la différence entre JAX-RS (en fait, il faudrait peut-être utiliser Jersey pour faire la comparaison puisque JAX-RS n'est qu'une spécification) et Spring pour les services Restful . J'ai essayé de rechercher plus d'informations en ligne et cela devient plus confus. Mon entreprise utilise Spring MVC pour développer des API reposantes.

Ce qui est déroutant, c'est que JAX-RS signifie API Java pour les services Web RESTful Dans Spring, j'utilise également Java pour développer des services Web RESTful, et je ne comprends donc pas vraiment les différences. Spring suit-il les spécifications de JAX-RS ?

De ce que je sais jusqu'à présent :

  1. JAX-RS est un modèle/spécification, avec Jersey, RESTeasy, etc. comme implémentations.

0 votes

@CássioMazzochiMolin merci pour votre réponse, je vais l'accepter dans un moment, une autre question, vous avez mentionné que le Spring Framework n'est pas une implémentation de JAX-RS, quelle spécification Spring suit-il ? Merci

4 votes

Il ne met en œuvre aucune spécification particulière. C'est juste le La voie du printemps de faire les choses. Les capacités REST sont fournies par le spring-webmvc qui fournit également le contrôleur de modèle-vue de Spring.

0 votes

182voto

Cássio Mazzochi Molin Points 11962

JAX-RS

JAX-RS est un spécification pour l'implémentation de services web REST en Java, actuellement définie par la norme JSR-370 . Il fait partie de la Technologies Java EE actuellement définie par la JSR 366 .

Jersey (livrée avec GlassFish et Payara) est l'implémentation de référence de JAX-RS, mais il existe d'autres implémentations telles que RESTEasy (livré avec JBoss EAP et WildFly) et Apache CXF (livré avec TomEE et WebSphere).

Cadre de travail de Spring

Le site Cadre de travail de Spring est un cadre complet qui vous permet de créer des applications d'entreprise Java. Les fonctionnalités REST sont fournies par le Spring MVC (le même module qui fournit contrôleur de modèle-vue capacités). Il ne s'agit pas d'une mise en œuvre de JAX-RS et peut être considéré comme une alternative de Spring à la norme JAX-RS.

L'écosystème Spring fournit également un large éventail de projets pour la création d'applications d'entreprise, couvrant la persistance, la sécurité, l'intégration aux réseaux sociaux, le traitement par lots, etc.

Exemples

Considérez le contrôleur de ressources suivant qui utilise l'API JAX-RS :

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

L'implémentation équivalente utilisant l'API Spring MVC serait :

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

Utilisation de Spring Boot et Jersey

Spring Boot fournit le spring-boot-starter-jersey qui vous permet d'utiliser le modèle de programmation JAX-RS pour les points de terminaison REST au lieu de Spring MVC. Il fonctionne très bien avec Jersey 2.x.

Pour un exemple complet de la création d'une application web avec Jersey 2.x et Spring Boot 1.4.x, reportez-vous à l'adresse suivante réponse .

0 votes

Donc, si nous utilisons Spring MVC et le déployons dans GlassFish/Payara, devons-nous désactiver les implémentations jax-rs dans le serveur ?

0 votes

Cet article est-il vrai avec spring 4 dzone.com/articles/ ? que spring web est meilleur pour faire des services web resT que juste spring + Jersey (JAX-RS) ?

69voto

Sridhar-Sarnobat Points 965

Différences d'annotation

(En date de 2018) Spring MVC ne s'est pas normalisé aux annotations JAX-RS, puisque sa solution est antérieure à JAX-RS. Voici les équivalents :

enter image description here

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

Si vous utilisez des API non standardisées, vous devez vous attendre à ce qu'elles soient dépréciées et éventuellement remplacées par une API expérimentale plus récente dans quelques années. La responsabilité de la rétrocompatibilité est beaucoup moins grande (par exemple lorsqu'une nouvelle version du JDK est publiée).

30voto

Midhun Pottammal Points 500

J'ai travaillé à la fois avec Jersey Rest, spring rest et Jersey Rest avec spring. Les deux sont des frameworks très riches avec de belles implémentations. Je dirais qu'il est préférable d'opter pour Spring Rest si vous utilisez d'autres services Spring tels que ORM, Spring security et DI, etc. Les deux sont des bibliothèques de Spring, donc je pense qu'il est un peu plus facile de gérer le code et les dépendances.

Les pros de JAX-RS :

  • Le standard JSR peut être exécuté sans conteneur de servlet (grizzly, simple, ...)
  • Implémentations prêtes à la production (jersey, cxf, resteasy, restlet, ...) conçues pour les applications REST uniquement.

Les pros de Spring MVC :

  • Fournir une pile "complète", pas seulement des fonctionnalités REST

  • Injection de dépendances / AOP / Transactions

  • Modèles de vue enfichables (JSP, freemarker, velocity, ...)

Vous pouvez en savoir plus sur les liens suivants

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Pourquoi utiliser JAX-RS / Jersey ?

4 votes

Cependant, JAX-RS peut également être utilisé avec Spring (pour DI, AOP, ...).

6voto

Rahul Singh Points 9890

JAX-RS est la spécification et jersey etc sont sa mise en œuvre. Les gens utilisent Spring pour créer des services Web Restful parce que Spring, en plus de l'implémentation Restful, fournit des choses comme l'intégration d'Hibernate et aussi des choses comme l'IOC et la programmation orientée aspect.

Si nous utilisons le jersey pour notre mise en œuvre, le problème sera que les données doivent être récupérées à partir de l'arrière-plan en utilisant certaines technologies ORM et nous devrons écrire du code passe-partout pour cela.

C'est la raison pour laquelle les gens et même les entreprises utilisent Spring car, en plus de l'implémentation de Rest, il fournit également des fonctionnalités de Spring. Et maintenant, en utilisant la dernière implémentation de Spring boot, nous pouvons commencer le développement très rapidement sans beaucoup de configurations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X