Diferencia entre JAX-RS y Spring Rest

138

Confundí con la diferencia entre JAX-RS (bueno, tal vez debería usar Jersey para hacer una comparación, ya que JAX-RS es solo una especificación) y Spring for Restful . Traté de buscar más información en línea y se volvió más confuso. Mi empresa está utilizando Spring MVC para desarrollar API de Restful

La parte confusa es que JAX-RS significa Java API para RESTful Web Services , en Spring también estoy usando java para desarrollar RESTful Web Services, por lo que no entiendo las diferencias. ¿Spring sigue las especificaciones JAX-RS?

Por lo que sé hasta ahora:

  1. JAX-RS es un plan / especificación, tiene implementaciones de Jersey, RESTeasy, etc.
infierno
fuente
@ CássioMazzochiMolin gracias por su respuesta, lo aceptaré en un momento más, una pregunta más, usted mencionó que The Spring Framework no es una implementación JAX-RS, ¿qué especificación sigue Spring? Gracias
Hades
3
No implementa ninguna especificación particular. Es solo la forma de hacer las cosas en primavera . Las capacidades REST son proporcionadas por el spring-webmvcmódulo que también proporciona el controlador de vista de modelo de Spring.
cassiomolin

Respuestas:

150

JAX-RS

JAX-RS es una especificación para implementar servicios web REST en Java, actualmente definida por el JSR-370 . Forma parte de las tecnologías Java EE , actualmente definidas por el JSR 366 .

Jersey (incluido con GlassFish y Payara) es la implementación de referencia JAX-RS, sin embargo, existen otras implementaciones como RESTEasy (incluido con JBoss EAP y WildFly) y Apache CXF (incluido con TomEE y WebSphere).

Spring Framework

El Spring Framework es un marco completo que le permite crear aplicaciones empresariales Java. Las capacidades REST son proporcionadas por el módulo Spring MVC (mismo módulo que proporciona capacidades de modelo-vista-controlador ). No es una implementación JAX-RS y puede verse como una alternativa de Spring al estándar JAX-RS.

El ecosistema de Spring también proporciona una amplia gama de proyectos para crear aplicaciones empresariales, que abarcan la persistencia, la seguridad, la integración con las redes sociales, el procesamiento por lotes, etc.

Ejemplos

Considere el siguiente controlador de recursos que utiliza la 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();
    }
}

La implementación equivalente usando la API Spring MVC sería:

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

Usando Spring Boot y Jersey

Spring Boot proporciona el spring-boot-starter-jerseymódulo que le permite utilizar el modelo de programación JAX-RS para los puntos finales REST en lugar de Spring MVC. Funciona bastante bien con Jersey 2.x.

Para obtener un ejemplo completo de cómo crear una aplicación web con Jersey 2.xy Spring Boot 1.4.x, consulte esta respuesta .

cassiomolin
fuente
Entonces, si usamos Spring MVC y lo despojamos en GlassFish / Payara, ¿necesitamos deshabilitar las implementaciones de jax-rs en el servidor?
Pradeep_Evol
¿Es cierto este artículo con spring 4 dzone.com/articles/… ? ¿Qué web de primavera es mejor para hacer servicios web de descanso que solo spring + Jersey (JAX-RS)?
tgkprog
58

Diferencias de anotación

(A partir de 2018) Spring MVC no se ha estandarizado para las anotaciones JAX-RS, ya que su solución es anterior a JAX-RS. Aquí están los equivalentes:

ingrese la descripción de la imagen aquí

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

Si está utilizando API no estandarizadas, debe esperar que sean obsoletas y posiblemente reemplazadas por una API experimental más nueva en unos pocos años. Hay mucha menos responsabilidad por la compatibilidad con versiones anteriores (por ejemplo, cuando se lanzan nuevas versiones de JDK).

Sridhar Sarnobat
fuente
Muchas gracias, esto es increíble
Bejond
26

Trabajé con Jersey Rest, spring rest y Jersey Rest con spring. Ambos son marcos muy ricos con implementaciones agradables. Sugeriría que es mejor ir con Spring rest si está utilizando otros servicios de Spring como ORM, Spring security y DI, etc. Ambas son bibliotecas de Spring, por lo que me siento un poco fácil para administrar el código y las dependencias.

Profesionales de JAX-RS:

  • El estándar JSR se puede ejecutar sin contenedor de servlet (grizzly, simple, ...)
  • Implementaciones listas para producción (jersey, cxf, resteasy, restlet, ...) diseñadas solo para aplicaciones REST

Spring MVC pros:

  • Proporcionar pila "completa", no solo instalaciones REST

  • Inyección de dependencias / AOP / Transacciones

  • Plantillas de vista conectables (JSP, freemarker, velocidad, ...)

Puedes consultar más en los siguientes enlaces

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. ¿Por qué usar JAX-RS / Jersey?
Midhun Pottammal
fuente
44
Sin embargo, JAX-RS también se puede usar con Spring (para DI, AOP, ...).
deamon
5

JAX-RS es la especificación y jersey, etc. son su implementación. La gente usa Spring para hacer servicios web RestFul porque porque Spring junto con una implementación tranquila proporciona cosas como la integración de hibernación y también cosas como IOC y programación orientada a Aspect.

Donde, como si usáramos jersey para nuestra implementación, el problema será que los datos deben recuperarse desde el back-end utilizando algunas tecnologías ORM y tendremos que escribir código repetitivo para el mismo.

Esa es la razón por la cual las personas e incluso las empresas usan Spring, ya que junto con la implementación de Rest también proporciona instalaciones de Spring. Y ahora, utilizando la última implementación de arranque de Spring, podemos comenzar el desarrollo muy rápido sin muchas configuraciones.

Rahul Singh
fuente