servicio - restful pdf español
¿Por qué usar JAX-RS/Jersey? (2)
¿Por qué usar JAX-RS / Jersey?
Respuesta corta
Porque hace que el desarrollo de los servicios RESTful sea más fácil.
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 utiliza con otras tecnologías Java EE, es aún más fácil crear su servicio RESTful:
- EJB : un bean de sesión se usa como implementación de servicio y también maneja la semántica de transacción.
- JAX-RS : se usa para exponer el bean de sesión como un servicio RESTful
- JPA : se usa para persistir en los POJO en la base de datos. Observe cómo el EntityManager se inyecta en el bean de sesión.
- JAXB : se usa para convertir el POJO a / desde XML (en GlassFish también se puede usar para convertir el POJO a / desde JSON). JAX-RS maneja por defecto la interacción con la implementación de JAXB.
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:
Lo siento, estas preguntas suenan tontas, pero después de desarrollar algunos de mis servicios RESTful usando Jersey, me hice la siguiente 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 los servlets y los 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 usa servlets inherentemente.
- Las herramientas compatibles con JAX-RS como Jersey facilitan el marshalling-unmarshalling de datos XML / JSON, ayudando a los desarrolladores.
- REST nos ayuda a usar GET / POST / PUT / DELETE de una manera que es mucho más eficiente que los servlets normales.
De acuerdo con estas respuestas, supongo que si escribo un servlet que utiliza JAXB (para tratar la serialización automática), y utilizo GET / POST / PUT / DELETE de manera eficiente en mi código de servlet, no uso una herramienta como Jersey, y de ahí JAX-RS.
Sé que estoy terriblemente equivocado al pasar esta declaración, por favor corrígeme.
PD: Esta duda realmente surgió cuando tuve que desarrollar algunos servicios RESTful en PHP. Después de seguir con algunos de los códigos RESTful PHP, me di cuenta de que son los mismos viejos scripts de PHP, con algunos métodos de ayuda para manejar XML / JSON.
REST es una arquitectura que usa servlets de forma inherente.
No, no es. REST es un estilo de arquitectura que se puede implementar utilizando servlets, pero no los usa ni tiene nada que ver intrínsecamente 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 intentar cumplir con la especificación JAX-RS, eso depende de usted. Si hace tu trabajo más fácil, ¡genial! Si no, nadie te está forzando.