JAX-RS (RESTful WS)

  • View
    40

  • Download
    0

Embed Size (px)

DESCRIPTION

JAX-RS (RESTful WS). M.C. Juan Carlos Olivares Rojas. Julio 2011. REST. Es un protocolo más sencillo de manejar los servicios Web, se caracteriza por no manejar SOAP ni WSDL y por lo tanto es más ligero. - PowerPoint PPT Presentation

Text of JAX-RS (RESTful WS)

  • JAX-RS (RESTful WS)M.C. Juan Carlos Olivares RojasJulio 2011

  • RESTEs un protocolo ms sencillo de manejar los servicios Web, se caracteriza por no manejar SOAP ni WSDL y por lo tanto es ms ligero.

    Los dems protocolos se siguen conservando. Los Servidores Web deben soportar este tipo de Servicios (ya es muy comn)

  • JAX-RSREST (Representational State Transfer)

    Muchos Servicios Web de la Web 2.0 trabajan bajo este enfoque.

    REST est orientado a los recursos.

    Utiliza los mtodos GET, POST, PUT y DELETE de HTTP.

  • JAX-RSEs la API de java para crear Servicios Web basados en la arquitectura REST

    Al igual que JAX-WS utiliza anotaciones como: @Path, @GET, @PUT, @DELETE, @HEAD, entre otras.

  • JAX-RSLa implementacin mejor conocida de JAX-RS se denomina Jersey.

    Existe un mapeo entre las acciones a realizar y el verbo.

    AccionesVerboCreatePOSTRetrieveGETUpdatePUTDeleteDELETE

  • JAX-RSLa descripcin de los WS con REST se hace a travs de WADL (Web Appliction Description Language), el cual es un archivo basado en XML que contiene las operaciones disponibles y su forma de acceso a travs del protocolo HTTP.

  • Ejemplo 1: SOAPPOST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn

    IBM

  • Ejemplo 1: RESTGET /stock/IBM HTTP/1.1 Host: www.example.org Accept: application/xml

  • Ejemplo 2: SOAPPOST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn

    IBM 50

  • Ejemplo 2: RESTPOST /order HTTP/1.1 Host: www.example.org Content-Type: application/xml; charset=utf-8

    IBM50

  • Acceso a los RecursosCreatePOST /resourceNameRetrieveGET /resourceName/resourceIdUpdatePUT /resourceName/resourceIdDeleteDELETE /resourceName/resourceId

  • Hola Mundo!!!import javax.ws.rs.Path;import javax.ws.rs.GET;import javax.ws.rs.ProduceMime;

    @Path("/helloRest")public class HelloRest {@GET@ProduceMime("text/html")public String sayHello() {return "Hello from Jersey!";}}

  • HolaMundo!!!Este servicio Web se ejecuta simplemente colocando la URL en el navegador.

    Si se ocupan pasar parmetros, dichos parmetros se pasan a travs de la URI por medio de los verbos HTTP.

  • Ejemplo de Parametros en URI@Path("/products/{id}")public class ProductResource {@Contextprivate UriInfo context;/** Creates a new instance of ProductResource */public ProductResource() { }

    @GET@ProduceMime("text/plain")public String getProduct(@PathParam("id") int productId) {switch (productId) {case 1: return "A Shiny New Bike";case 2: return "Big Wheel";case 3: return "Taser: Toddler Edition";default: return "No such product";}}}

  • Expresiones RegularesComo puede observarse, las direcciones de los servicios Web pueden manejar expresiones regulares para simplificar mejor su uso.

    Tambin se puede indicar el verbo de ejecucin del WS.

  • Parmetros de @Path

    @Path(customer/{name}")public class Customer {@GETString get(@PathParam("name") String name) { }@PUTVoid put(@PathParam(name) String name, String value) { }

  • Ejemplo Expresiones Regulares@Path("/products/{id: \\d{3}}")public class ProductResource {public ProductResource() { }@GET@Produces("text/plain")public String getProductPlainText(@PathParam("id") int productId) {return "Your Product is: " + productId;}}

    Correcto:http://localhost:8080/jrs/resources/products/555 Incorrecto (regresa estado 404)http://localhost:8080/jrs/resources/products/7

  • Utilizando Cadenas de Bsqueda@GET@Produces("text/xml")public String getProducts(@PathParam("id") int productId,@QueryParam("results")@DefaultValue("5") int numResults)

    ///resources/products?results=3

  • Acceso a Encabezados@GET public String doGet(@Context HttpHeaders headers) {//list all incoming headersMultivaluedMap h = headers.getRequestHeaders();for (String header : h.keySet()) {System.out.println(header + "=" + h.get(header));}

  • Dudas

    **Can reach an instance of this class at :///.http://localhost:8080/HelloWorld/resources/helloRest

    *The value of @PathParam must match the value in {} of @PathNotice the @ProduceMime as well*Use @DefaultValue in case the value is not passed. Here, if you access without the QueryParameter, you get 5 results*Looking at headers.accept-encoding=[gzip, deflate]cache-control=[no-cache]connection=[Keep-Alive]host=[localhost:8080]accept-language=[en-us]user-agent=[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)]ua-cpu=[x86]accept=[*/*]