web-dev-qa-db-fra.com

Différence entre JAX-RS et Spring Rest

J'ai confondu avec la différence entre JAX-RS (enfin, vous devriez peut-être utiliser Jersey pour faire des comparaisons 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 est devenu encore plus confus. Ma société utilise Spring MVC pour développer des API reposantes

La partie déroutante est, JAX-RS signifie API Java pour les services Web RESTful, au printemps, j'utilise également Java pour développer des services Web RESTful. les différences. Spring suit-il les spécifications JAX-RS?

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

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

JAX-RS

JAX-RS est une spécification pour la mise en oeuvre de REST services Web en Java, actuellement définis par le JSR-37 . Il fait partie des technologies Java EE , actuellement définies par le JSR 366 .

Jersey (fourni avec GlassFish et Payara) correspond à l'implémentation de référence JAX-RS. Il existe toutefois d'autres implémentations telles que RESTEasy (fourni avec JBoss EAP et WildFly) et Apache CXF (fourni avec TomEE et WebSphere).

Cadre de printemps

Spring Framework est un framework complet qui vous permet de créer Java applications d'entreprise. Les capacités REST sont fournies par le module Spring MVC (même module que celui qui fournit model-view-controller capacités). Ce n'est pas une implémentation JAX-RS et peut être considéré comme une alternative printanière au standard JAX-RS.

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

Exemples

Prenez en compte 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);
    }
}
_

À l'aide de bottes de printemps et de jersey

Spring Boot fournit le module spring-boot-starter-jersey qui vous permet d'utiliser le modèle de programmation JAX-RS pour les noeuds finaux REST au lieu de Spring MVC. Cela fonctionne assez bien avec Jersey 2.x.

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

111
cassiomolin

Différences d'annotation

(À compter de 2018) Spring MVC n’a pas normalisé les annotations JAX-RS, car 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 normalisées, attendez-vous à ce qu'elles soient obsolètes et éventuellement remplacées par une nouvelle API expérimentale dans quelques années. Il y a beaucoup moins de responsabilité vis-à-vis de la compatibilité ascendante (par exemple, lorsqu'une nouvelle version de JDK est publiée).

32
Sridhar Sarnobat

J'ai travaillé avec Jersey Rest, Spring Rest et Jersey Rest Spring. Les deux sont des cadres très riches avec des implémentations de Nice. Je suggérerais qu'il vaut mieux utiliser Spring repos si vous utilisez d'autres services Spring tels que ORM, Spring security et DI, etc. Les deux bibliothèques sont des bibliothèques Spring;

JAX-RS pros:

  • 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

Spring MVC pros:

  • Fournit une pile "complète", pas seulement REST

  • Injection de dépendance/AOP/Transactions

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

Vous pouvez vérifier plus sur les liens suivants

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

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, associé à une mise en œuvre reposante, fournit des éléments tels que l’intégration en veille prolongée, ainsi que des éléments tels que IOC et la programmation orientée Aspect.

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

C’est la raison pour laquelle les gens et même les entreprises utilisent Spring, de même que la mise en œuvre Rest, qui fournit également des installations Spring. Et maintenant, en utilisant la dernière implémentation Spring Boot, nous pouvons commencer le développement très rapidement sans beaucoup de configurations.

4
Rahul Singh