Servlet vs RESTful

Hoy leí sobre los servicios de Restful. Básicamente lo que entiendo es que los servicios web de Restful funcionarán en los métodos de solicitud HTTP en lugar de que el servicio web normal funcione en la solicitud SOAP.

¿Cuál es la necesidad de servicios tranquilos ya que el servlet normal también puede funcionar en los métodos HTTP?

RESTful es más un estilo de architecture que una tecnología diferente. En la perspectiva del servidor, está diseñado para ser completamente apátrida y autónoma por solicitud (es decir, no hay sesiones). En la perspectiva del cliente, es más una forma de obtener información en diferentes formatos a través de URL con parámetros de ruta (autodocumentados) en lugar de parámetros de solicitud.

Seguramente puede hacer esto con un servlet simple de vainilla, pero introduciría un código repetitivo para reunir los parámetros de ruta y generar la respuesta deseada. JAX-RS es solo una API conveniente y autónoma que elimina la necesidad de escribir todo el código repetitivo usted mismo, lo que resulta en un código mínimo y más de auto-documentación.

Suponiendo que tiene una entidad JAXB como modelo de la siguiente manera:

@XmlRootElement public class Data { @XmlElement private Long id; @XmlElement private String value; // ... @Override public String toString() { return String.format("Data[id=%d,value=%s]", id, value); } } 

Y un recurso JAX-RS como a continuación:

 @Path("data") public class DataResource { @EJB private DataService service; @GET @Path("text/{id}") @Produces(MediaType.TEXT_PLAIN) public String getAsText(@PathParam("id") Long id) { return String.valueOf(service.find(id)); } @GET @Path("xml/{id}") @Produces(MediaType.APPLICATION_XML) public Data getAsXml(@PathParam("id") Long id) { return service.find(id); } @GET @Path("json/{id}") @Produces(MediaType.APPLICATION_JSON) public Data getAsJson(@PathParam("id") Long id) { return service.find(id); } } 

Entonces ya obtendría el contenido deseado en el formato adecuado de la siguiente manera:

Eso es. Trate de hacer lo mismo con un solo Servlet simple de vainilla 🙂 Tenga en cuenta que SOAP esencialmente también pasa por HTTP. Básicamente es una capa XML extra sobre HTTP, no un protocolo de red diferente.

Ver también:

  • Tutorial de REST
  • JAXB tutorial
  • Tutorial de Jersey

En mi opinión, para una mejor comprensión, debemos analizar los componentes que nos confunden y estos componentes son:

  1. Concepto REST

Fielding utilizó REST para diseñar HTTP 1.1 e identificadores uniformes de recursos (URI)

  1. Protocolo HTTP – Protocolo de transferencia de hipertexto
  2. clase javax.servlet.http.HttpServlet
  3. REST con Java – JAX-RS y sus implementaciones (como Jersey, etc.)
  4. Otras implementaciones de REST que no se ajustan a JAX-RS (como Spring REST) Diferencia entre JAX-RS y Spring Rest

Luego, si refiere esta respuesta, entienda cómo esta implementación usa un Servlet (Un javax.servlet.http.HttpServlet concreto javax.servlet.http.HttpServlet ) para interceptar todas las solicitudes entrantes. Cita importante hay,

Estas clases de servicio REST son POJOs sencillos anotados para indicarle al jersey framework acerca de diferentes propiedades tales como ruta de acceso, consumo, producción, etc.

Luego puede leer más acerca de: ¿Cuál es la diferencia entre los protocolos REST y HTTP? & ¿Cuál es la diferencia entre HTTP y REST? y llegue a una conclusión sobre las ventajas que obtendrá si realiza su servicio web RESTFul, concretamente (copiado de una respuesta),

REST no está necesariamente vinculado a HTTP . Los servicios web RESTful son solo servicios web que siguen una architecture RESTful.

 What is Rest - 1- Client-server 2- Stateless 3- Cacheable 4- Layered system 5- Code on demand 6- Uniform interface 

¿Cuál es la ventaja de utilizar REST en lugar de HTTP no REST?

Sin embargo, no me gustaría entrar en el debate de desventajas (pros y contras) ya que es muy subjetivo.

Con las lecturas anteriores, ahora para su pregunta,

¿Cuál es la necesidad de servicios tranquilos ya que el servlet normal también puede funcionar en los métodos HTTP?

Comprendería que los Frameworks REST simplemente simplifican la implementación de los Servicios REST a nivel empresarial, pero usan el Servlet HTTP para interceptar las solicitudes entrantes. Siempre puede usar servlets simples para implementar sus propios servicios REST, pero eso simplemente llevaría más tiempo con muchos códigos de placa de caldera.