1 / 20

JAX-RS (RESTful WS)

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.

mervyn
Download Presentation

JAX-RS (RESTful WS)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JAX-RS (RESTful WS) M.C. Juan Carlos Olivares Rojas Julio 2011

  2. 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. • Los demás protocolos se siguen conservando. Los Servidores Web deben soportar este tipo de Servicios (ya es muy común)

  3. JAX-RS • REST (Representational State Transfer) • Muchos Servicios Web de la Web 2.0 trabajan bajo este enfoque. • REST está orientado a los recursos. • Utiliza los métodos GET, POST, PUT y DELETE de HTTP.

  4. JAX-RS • Es 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.

  5. JAX-RS • La implementación mejor conocida de JAX-RS se denomina Jersey. • Existe un mapeo entre las acciones a realizar y el verbo.

  6. JAX-RS • La descripción de los WS con REST se hace a través 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 través del protocolo HTTP.

  7. Ejemplo 1: SOAP POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>

  8. Ejemplo 1: REST GET /stock/IBM HTTP/1.1 Host: www.example.org Accept: application/xml

  9. Ejemplo 2: SOAP POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:BuyStock> <m:StockName>IBM</m:StockName> <m:Quantity>50</m:Quantity> </m:BuyStock> </soap:Body> </soap:Envelope>

  10. Ejemplo 2: REST POST /order HTTP/1.1 Host: www.example.org Content-Type: application/xml; charset=utf-8 <?xml version="1.0"?> <order> <StockName>IBM</StockName> <Quantity>50</Quantity> </order>

  11. Acceso a los Recursos • Create • POST /resourceName • Retrieve • GET /resourceName/resourceId • Update • PUT /resourceName/resourceId • Delete • DELETE /resourceName/resourceId

  12. 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 "<html><body><h1>Hello from Jersey!</body></h1></html>"; } }

  13. HolaMundo!!! • Este servicio Web se ejecuta simplemente colocando la URL en el navegador. • Si se ocupan pasar parámetros, dichos parámetros se pasan a través de la URI por medio de los verbos HTTP.

  14. Ejemplo de Parametros en URI @Path("/products/{id}") public class ProductResource { @Context private 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"; } } }

  15. Como puede observarse, las direcciones de los servicios Web pueden manejar expresiones regulares para simplificar mejor su uso. • También se puede indicar el verbo de ejecución del WS. Expresiones Regulares

  16. @Path(“customer/{name}") public class Customer { @GET String get(@PathParam("name") String name) { … } @PUT Void put(@PathParam(“name”) String name, String value) { … } Parámetros de @Path

  17. @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 Ejemplo Expresiones Regulares

  18. Utilizando Cadenas de Búsqueda @GET @Produces("text/xml") public String getProducts( @PathParam("id") int productId, @QueryParam("results") @DefaultValue("5") int numResults) • //…/resources/products?results=3

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

  20. Dudas

More Related