viernes, 13 de marzo de 2009

REST Web Services con Jersey (I)

Representational State Transfer (REST) es un estilo de arquitectura, originalmente descrito por Roy Fielding en su disertación en 2000, para aplicaciones que especifica un conjunto de restricciones:

  • Protocolo cliente/servidor sin estado
  • Operaciones simples y claras: GET, POST, PUT y DELETE
  • Las funcionalidades y los datos son recursos, identificados y accedidos por una URI
  • Intercambio de información con interfaces y protocolos estándar
  • Uso de hypermedia para enlazar contenidos

Todo esto permite crear aplicaciones simples, facilmente escalables y cacheables, con buen rendimiento. Desde el punto de vista del cliente, puede obtener la información deseada con múltiples representaciones (texto, HTML, XML, JSON, JSONP, etc..) y puede guardar las páginas en favoritos.

JAX-RS es la API para desarrollar servicios web RESTful con Java y formará parte de Java EE 6. Por otro lado, Jersey, es la implementación de referencia de JAX-RS (existen otras implementaciones: Jboss RESTEasy, Restlet y Apache CXF)

Básicamente, REST propone utilizar la web correctamente, simplificando el desarrollo de Web Services.

Para empezar a desarrollar servicios web con Jersey, las librerías necesarias son en Java SE 6:

Se puede obtener información completa en
https://jersey.dev.java.net/source/browse/*checkout*/jersey/tags/jersey-1.0.2/jersey/dependencies.html

Las librerías deben situarse en el directorio lib de Tomcat.

Para desarrollar nuestra primera aplicación, debemos añadir el siguiente código en el web.xml, de forma que Jersey procese las peticiones dirigidas a nuestros servicios:

<servlet>
<servlet-name>JerseyServlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JerseyServlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>

Los recursos son POJO's anotados con @Path, que publica el recurso en esa URI. Las URI's, son relativas.
Los métodos públicos de un recurso permiten atender las peticiones de los clientes. Mediante anotaciones se indican los métodos HTTP soportados:

Así, nuestro primer ejemplo quedaría:


package com.domborjo.rest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/holaMundo")
public class HolaMundo {
@GET
public String sayHola() {
return "Hola Mundo!";
}
}

Jersey escaneará las clases de nuestra aplicación y detectará automáticamente los recursos. Para comprobar que funciona correctamente basta con acceder a http://localhost[:PUERTO]/[CONTEXTO_APP]/resources/holaMundo

Espero que os haya gustado, queda mucho más por ver!

1 comentario:

giovanny dijo...

saludos por favor Puedes ayudarme con esta consulta, busque información referente a API o Frameworks Java que ayuden a la construcción de clases Java que implemente las características de REST. Mencione por lo menos 2 APIs o Frameworks.

gracias por su ayuda