Lo siento, esta pregunta suena tonta, pero después de desarrollar algunos de mis servicios RESTful usando Jersey, me hice la pregunta: si REST es solo una arquitectura y no un protocolo como SOAP, ¿por qué necesitamos una especificación como JAX-RS?
De hecho, busqué en Google preguntas como "¿Cuál es la diferencia entre servlets y servicios RESTful a través de HTTP" y, para resumir las respuestas de la comunidad, obtuve:
- El desarrollo de servicios RESTful (en Jersey) es una arquitectura que utiliza servlets de forma inherente.
- Las herramientas compatibles con JAX-RS, como Jersey, facilitan la clasificación y eliminación de datos XML / JSON, lo que ayuda a los desarrolladores.
- REST nos ayuda a usar GET / POST / PUT / DELETE de una manera mucho más eficiente que los servlets normales.
De acuerdo con estas respuestas, supongo que si escribo un servlet que usa JAXB (para lidiar con la serialización automática) y uso eficientemente GET / POST / PUT / DELETE en mi código de servlet, no uso una herramienta como Jersey, y de ahí JAX-RS.
Sé que estoy muy equivocado al aprobar esta declaración, por favor corríjame.
PD: Esta duda surgió cuando tuve que desarrollar algunos servicios RESTful en PHP. Después de pasar por algunos de los códigos PHP RESTful, me di cuenta de que son los mismos scripts PHP antiguos, con algunos métodos auxiliares para manejar XML / JSON.
Respuestas:
Respuesta corta
Porque facilita el desarrollo de servicios RESTful.
Respuesta larga
JAX-RS es un estándar que facilita la creación de un servicio RESTful que se puede implementar en cualquier servidor de aplicaciones Java: GlassFish, WebLogic, WebSphere, JBoss, etc.
JAX-RS es parte de Java EE, y cuando JAX-RS se usa con otras tecnologías Java EE, se vuelve aún más fácil crear su servicio RESTful:
Ejemplo de servicio JAX-RS
package org.example; import java.util.List; import javax.ejb.*; import javax.persistence.*; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; @Stateless @LocalBean @Path("/customers") public class CustomerService { @PersistenceContext(unitName="CustomerService", type=PersistenceContextType.TRANSACTION) EntityManager entityManager; @POST @Consumes(MediaType.APPLICATION_XML) public void create(Customer customer) { entityManager.persist(customer); } @GET @Produces(MediaType.APPLICATION_XML) @Path("{id}") public Customer read(@PathParam("id") long id) { return entityManager.find(Customer.class, id); } @PUT @Consumes(MediaType.APPLICATION_XML) public void update(Customer customer) { entityManager.merge(customer); } @DELETE @Path("{id}") public void delete(@PathParam("id") long id) { Customer customer = read(id); if(null != customer) { entityManager.remove(customer); } } @GET @Produces(MediaType.APPLICATION_XML) @Path("findCustomersByCity/{city}") public List<Customer> findCustomersByCity(@PathParam("city") String city) { Query query = entityManager.createNamedQuery("findCustomersByCity"); query.setParameter("city", city); return query.getResultList(); } }
Para más información:
fuente
No, no es. REST es un estilo de arquitectura que se puede implementar usando servlets, pero no los usa inherentemente, ni tiene nada que ver inherentemente con Java.
JAX-RS es una especificación JSR que define una API Java para servicios web RESTful.
Jersey es una implementación específica de JAX-RS.
En cuanto a si usar Jersey o tratar de cumplir con la especificación JAX-RS, eso depende de usted. Si te facilita el trabajo, ¡genial! Si no, nadie te está obligando.
fuente