Différence entre JAX-RS et Spring Rest

138

J'ai confondu avec la différence entre JAX-RS (enfin, je devrais peut-être utiliser Jersey pour faire la comparaison puisque JAX-RS n'est que des spécifications) et Spring for Restful services . J'ai essayé de rechercher plus d'informations en ligne et cela devient plus déroutant. Mon entreprise utilise Spring MVC pour développer des API Restful

La partie déroutante est que JAX-RS signifie Java API pour RESTful Web Services , au printemps, j'utilise également java pour développer des services Web RESTful, donc je ne comprends pas vraiment les différences. Spring suit-il les spécifications JAX-RS?

De ce que je sais jusqu'à maintenant:

  1. JAX-RS est un plan / spécification, il a Jersey, RESTeasy, etc. comme implémentations.
Enfers
la source
@ CássioMazzochiMolin merci pour votre réponse, je l'accepterai dans un moment. Encore une question, vous avez mentionné que le Spring Framework n'est pas une implémentation JAX-RS, quelle spécification Spring suit? Merci
hades
3
Il n'implémente aucune spécification particulière. C'est juste la façon printanière de faire les choses. Les capacités REST sont fournies par le spring-webmvcmodule qui fournit également le contrôleur de vue de modèle de Spring.
cassiomoline

Réponses:

150

JAX-RS

JAX-RS est une spécification pour l'implémentation de services Web REST en Java, actuellement définie par le JSR-370 . Il fait partie des technologies Java EE , actuellement définies par le JSR 366 .

Jersey (livré avec GlassFish et Payara) est l'implémentation de référence 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 printemps

Le Spring Framework est un cadre complet qui vous permet de créer des applications Java d'entreprise. Les fonctionnalités REST sont fournies par le module Spring MVC (le même module qui fournit des fonctionnalités de contrôleur de vue de modèle ). Ce n'est pas une implémentation JAX-RS et peut être considéré comme une alternative Spring à la norme JAX-RS.

L'écosystème Spring propose également un large éventail de projets de 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 à l'aide de 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-jerseymodule qui vous permet d'utiliser le modèle de programmation JAX-RS pour les points de terminaison REST au lieu de Spring MVC. Cela fonctionne assez bien avec Jersey 2.x.

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

cassiomoline
la source
Donc, si nous utilisons spring MVC et le déposons dans GlassFish / Payara, devons-nous désactiver les implémentations jax-rs sur le serveur?
Pradeep_Evol
cet article est-il vrai avec Spring 4 dzone.com/articles/... ? que Spring Web est préférable pour créer des services Web ResT que juste Spring + Jersey (JAX-RS)?
tgkprog
58

Différences d'annotation

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

entrez la description de l'image ici

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 obsolètes et éventuellement remplacées par une API expérimentale plus récente dans quelques années. Il y a beaucoup moins de responsabilité en matière de compatibilité descendante (par exemple, lorsqu'une nouvelle version de JDK est publiée).

Sridhar Sarnobat
la source
Merci beaucoup, c'est génial
Bejond
26

J'ai travaillé avec Jersey Rest, Spring Rest et Jersey Rest with Spring. Les deux sont des frameworks très riches avec de belles implémentations. Je suggérerais qu'il est préférable d'utiliser Spring Rest si vous utilisez d'autres services Spring tels que ORM, Spring Security et DI, etc. Les deux sont des bibliothèques Spring, donc je me sens un peu facile pour gérer le code et les dépendances

Avantages du JAX-RS:

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

Avantages de Spring MVC:

  • Fournir une pile «complète», pas seulement des installations REST

  • Injection de dépendances / AOP / Transactions

  • Modèles de vue enfichables (JSP, freemarker, vélocité, ...)

Vous pouvez en savoir plus sur les liens suivants

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Pourquoi utiliser JAX-RS / Jersey?
Midhun Pottammal
la source
4
Cependant, JAX-RS peut également être utilisé avec Spring (pour DI, AOP, ...).
deamon
5

JAX-RS est la spécification et le maillot, etc. sont sa mise en œuvre. Les gens utilisent Spring pour créer des services Web RestFul, car Spring avec une implémentation reposante fournit des éléments tels que l'intégration de la mise en veille prolongée et également des éléments tels que la programmation orientée IOC et Aspect.

Là où, comme si nous utilisions jersey pour notre implémentation, le problème sera que les données doivent être extraites du back-end en utilisant certaines technologies ORM et nous devrons écrire un code standard pour le même.

C'est la raison pour laquelle les gens et même les entreprises utilisent Spring, car avec l'implémentation Rest, il fournit également des installations 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.

Rahul Singh
la source