Web services restful con JAX-RS

1,427
-1

Published on

Transferencia de Estado Representacional (Representational State Transfer) o REST
Originado en el año 2000 por el doctor Roy Fielding en la Universidad de California en su tesis doctoral
Tesis “Estilos de Arquitectura y el Diseño de Arquitecturas de Software basadas en Redes”
Principios arquitectónicos de software para usar a la Web como una plataforma de Procesamiento Distribuido

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,427
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
69
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Web services restful con JAX-RS

  1. 1. Servicios  Web   RestFul   Diego  Armando  Gómez  M.   dgomez@vortexbird.com   Sun  Cer:fied  Java  Associated.   Sun  Cer:fied  Java  Programmer.   Sun  Cer:fied  Web  Component  Developer.   Sun  Cer:fied  Business  Component  Developer  5   Derechos  reservados  2014  
  2. 2. Que  es  un  WebService?   S  Un  WebService  es  una  pieza  de  soLware   iden:ficada  por  un  URI  (Uniform  Resource   Iden:fier).   S  Su  medio  de  comunicación  se  fundamenta  en  el   uso  de  XML,  TEXT,  JSON   S  XML   S  XML  Namespace,  XML  Schema,  Xpath,  XSLT.   S  HTTP,  JSON  
  3. 3. Computación  distribuida   Servers PDA Servers Cell Phone Internet Workstation Clients Client-Server(C/S) silos Clients Web-based computing SOA computing Kiosk Server Laptop Web Services/Peer-to-Peer
  4. 4. Tradicional  C/S  vs.  Servicios  Web   Traditional C/S " " Within enterprise Tied to a set of programming languages " Procedural " Usually bound to a particular transport " Tightly-coupled " Efficient processing (space/time) Web Service " Between enterprises   "  Program language independent "  Message-driven "  Easily bound to different transports "  Loosely-coupled "  Relatively not efficient processing
  5. 5. Web  Applica:on  vs.  Web  Services   Web Application " User-to-program interaction " Static integration of components " Monolithic service Web Service "  Program-to-program interaction "  Possibility of dynamic integration of components (in the future) "  Possibility of service aggregation (in the future)
  6. 6. RestFul  
  7. 7. Historia   S  Transferencia  de  Estado  Representacional   (Representa:onal  State  Transfer)  o  REST   S  Originado  en  el  año  2000  por  el  doctor    Roy  Fielding   en  la  Universidad  de  California  en  su  tesis  doctoral   S  Tesis  “Es:los  de  Arquitectura  y  el  Diseño  de   Arquitecturas  de  SoLware  basadas  en  Redes”   S  Principios  arquitectónicos  de  soLware  para  usar  a  la   Web  como  una  plataforma  de  Procesamiento   Distribuido  
  8. 8. Historia   S  U:liza  XML  y  HTTP,  sin  las  abstracciones  adicionales   de  los  protocolos  basados  en  patrones  de   intercambio  de  mensajes  como  el  protocolo  de   servicios  web  SOAP.     S  Se  hizo  popular  muchos  años  después  con  la   creación  de  varios  framework  que  hacen  fácil  el   desarrollo  de  servicios  RestFul  
  9. 9. Historia   S  Muchas  empresas  con  amplios  servicios  en  internet   están  migrando  sus  servicios  a  Rest.   S  S  S  S  Amazon   Facebook   Yahoo   Twiter  
  10. 10. Los  4  principios  de  Rest   S  U:liza  los  métodos  HTTP  de  manera  explícita   S  No  man:ene  estado   S  Expone  URIs  con  forma  de  directorios   S  Transfiere  XML,  JavaScript  Object  Nota:on  (JSON),  o   ambos  
  11. 11. Uso  de  métodos  HTTP  de  manera  explícita   S  RestFul  usa  de  forma  explicita  los  métodos  HTTP   para  ejecutar  acciones  de  CRUD   Verbo  REST   Acción   POST   Create   GET   Read   PUT   Update   DELETE   Delete  
  12. 12. No  man:ene  estado   S  Basado  en  el  protocolo  HTTP  sin  estado.   S  Servicios  mas  simples  de  diseñar,  escribir  y  reu:lizar.   S  El  manejo  de  los  estados  debe  ser  hecho  por  el   cliente  de  los  servicios.  
  13. 13. Expone  URIs  con  forma  de  directorios   S  Las  URI  de  los  servicios  Rest  deben  ser  intui:vas.   S  Se  deben  poder  deducir  de  forma  fácil.   S  Las  URI  se  definen  como  una  estructura  de  carpetas   o  directorios.  
  14. 14. Expone  URIs  con  forma  de  directorios   S  Direcciones  de  un  blog   –  hip://www.vortexbird.org/discusion/temas/{tema}   –  hip://www.vortexbird.org/discusion/{año}/{mes}/{dia}/{tema}   –  hip://www.vortexbird.org/discusion/2008/12/23/javaEE  
  15. 15. Expone  URIs  con  forma  de  directorios   S  Buenas  prac:cas  para  crear  URIs  para  servicios  Rest   S  Ocultar  la  tecnología  usada  en  el  servidor  que  aparecería  como   S  S  S  S  S  extensión  de  archivos  (.jsp,  .php,  .asp),  de  manera  de  poder   portar  la  solución  a  otra  tecnología  sin  cambiar  las  URI.   Mantener  todo  el  uri  en  minúsculas.   Sus:tuir  los  espacios  con  guiones  o  guiones  bajos  (uno  u  otro).   Evitar  el  uso  de  strings  de  consulta.   En  vez  de  usar  un  404  Not  Found  si  la  pe:ción  es  una  URI   parcial,  devolver  una  página  o  un  recurso  predeterminado  como   respuesta.   URI  está:co  deforma  que  los  usuarios  puedan  crear  favoritos"  o   bookmarks.  
  16. 16. Transfiere  XML,  JSON  o  ambos   S  XML:  eXtensible  Markup  Language   <menu id="file" value="File"> <popup> <menuitem value="New" onclick="CreateNewDoc()" /> <menuitem value="Open" onclick="OpenDoc()" /> <menuitem value="Close" onclick="CloseDoc()" /> </popup> </menu>
  17. 17. Transfiere  XML,  JSON  o  ambos   S  JSON:    JavaScript  Object  Nota:on   {"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }}
  18. 18. Transfiere  XML,  JSON  o  ambos   S  Tipos  MIME  más  usados  para  los  servicios  web  REST   son:   MIME-­‐Type   Content-­‐Type   JSON   applica:on/json   XML   applica:on/xml   XHTML   applica:on/xhtml+xml   TEXT   text/plain  
  19. 19. Web  Applica:on  Descrip:on   Language  (WADL)    
  20. 20. Web  Applica:on  Descrip:on  Language   (WADL)     S  Formato  XML  usado  para  la  descripción  de   aplicaciones  Web  basadas  en  HTTP.   S  El  propósito  de  WADL  es  describir  los  servicios  Rest  o   cualquier  si:o  web.   S  Cumple  un  papel  similar  a  WSDL  para  servicios  SOAP.   S  Estándar  administrado  por  W3C.  
  21. 21. •  Web  Applica:on  Descrip:on  Language   Yahoo  news  search   (WADL)     01  <?xml  version="1.0"  standalone="yes"?>   02  <applica:on  targetNamespace="urn:yahoo:yn"   03    xmlns:xsi="hip://www.w3.org/2001/XMLSchema-­‐instance"   04    xmlns:xsd="hip://www.w3.org/2001/XMLSchema"   05    xmlns:yn="urn:yahoo:yn"   06    xmlns:tns="urn:yahoo:yn"   07    xmlns:ya="urn:yahoo:api"   08    xmlns="hip://research.sun.com/wadl">   09           ……….   23    <opera:on  name="NewsSearch"  method="get">   24        <request>   25            <parameter  name="appid"  type="xsd:string"  required="true"/>   26            <parameter  name="query"  type="xsd:string"  required="true"/>   27            <parameter  name="type"  type="xsd:string"/>   28            <parameter  name="results"  type="xsd:int"/>   29            <parameter  name="start"  type="xsd:int"/>   30            <parameter  name="sort"  type="xsd:string"/>   31            <parameter  name="language"  type="xsd:string"/>   32        </request>   33        <response>   34            <representa:on  mediaType="text/xml"  element="yn:ResultSet">   35                <parameter  name="totalResults"   36                    type="xsd:nonNega:veInteger"   37                    path="/ResultSet/@totalResultsAvailable"/>   38                <parameter  name="resultsReturned"   39                    type="xsd:nonNega:veInteger"   40                    path="/ResultSet/@totalResultsReturned"/>   41                <parameter  name="resultPosi:on"   42                    type="xsd:nonNega:veInteger"   43                    path="/ResultSet/@firstResultPosi:on"/>   44                <parameter  name="results"  path="/ResultSet/Result"/>   45            </representa:on>   46            <fault  name="SearchError"  status="400"   47                mediaType="text/xml"  element="ya:Error">   48                <parameter  name="msg"  path="/Error/Message"   49                    type="xsd:string"/>   50            </fault>   51        </response>   52    </opera:on>   53</applica:on>  
  22. 22. JAX-­‐RS  
  23. 23. JAX-­‐RS   S  Especificación  para  desarrollo  de  servicios  Rest  en  la   plataforma  JavaEE   S  Versión  actual  JAX-­‐RS  1.1   S  JSR  311   S  Integrada  a  JavaEE6   S  Anotaciones  para  exposición  de  servicios.   S  Es  el  equivalente  de  JAX-­‐WS  para  SOAP  
  24. 24. JAX-­‐RS   S  Implementaciones  de  referencia.   –  Jersey  (Sun  Oracle)   –  CXF  (Apache)   –  RESTEasy  (Jboss)    
  25. 25. JAX-­‐RS   S  Basados  en  el  concepto  de  POJO  (Plain  Old  Java   Object)   S  Clases  sin  extends  ni  implements  (Mar:n  Fowler)   S  Término  heredado  de  C/C++:  Plain  Old  Data  (POD)   S  Tiene  sen:do,  son  clases  de  datos  
  26. 26. Anotaciones  JAX-­‐RS   Anotación   Descripción   @GET   Marca  el  método  como  accesible  a  través  del  método  GET   de  HTTP   @POST   Marca  el  método  como  accesible  a  través  del  método   POST  de  HTTP   @PUT   Marca  el  método  como  accesible  a  través  del  método  PUT   de  HTTP   @DELETE   Marca  el  método  como  accesible  a  través  del  método   DELETE  de  HTTP   @HEAD   Marca  el  método  como  accesible  a  través  del  método   HEAD  de  HTTP  
  27. 27. Anotaciones  JAX-­‐RS   Anotación   Descripción   @Path   Indica  donde  queda  alojada  la  clase  o  el  método.  Por   ejemplo  /holaMundo/   @PathParam   Se  usa  para  asignar  a  los  parámetros  de  los  métodos  el   nombre  del  path  usado.   @Consumes   Se  usa  para  iden:ficar  el  :po  de  mime  que  consume  el   método  u  operación  del  servicios.  Ejemplos  "applica:on/ xml",  "applica:on/json"   @Produces   Se  usa  para  iden:ficar  el  :po  de  mime  que  produce  el   método  u  operación  del  servicios.  Ejemplos  "applica:on/ xml",  "applica:on/json“   @Provider   Se  usa  para  crear  una  clase  especializada  que  representan   en:ty  body.  Estas  clases  implementan   MessageBodyReader  or  MessageBodyWrite  
  28. 28. Tipos  de  datos  soportados   Tipo  de  dato  Java   Mime  Type   byte[]   All  media  types  (*/*)   ava.lang.String   All  text  media  types  (text/*)   java.io.InputStream   All  media  types  (*/*)   java.io.Reader   All  media  types  (*/*)   java.io.File   All  media  types  (*/*)   javax.ac:va:on.DataSource   All  media  types  (*/*)   javax.xml.transform.Source   XML  media  types  (text/xml,  applica:on/xml,  and   applica:on/*+xml)   javax.xml.bind.JAXBElement  and  applica:on-­‐ supplied  JAXB  classes   XML  media  types  (text/xml,  applica:on/xml,  and   applica:on/*+xml)   Mul:valuedMap<String,  String>   Form  content  (applica:on/x-­‐www-­‐form-­‐ urlencoded)   StreamingOutput   All  media  types  (*/*),  MessageBodyWriter  only  
  29. 29. Código  de  ejemplo   hip://127.0.0.1:8080/demoRest/services/operacionesMatema:cas/sumar/52/6   package  com.vortexbir.rest.services;     import  javax.ws.rs.Consumes;   import  javax.ws.rs.GET;   import  javax.ws.rs.Path;   import  javax.ws.rs.PathParam;   import  javax.ws.rs.Produces;     @Consumes({"applica:on/xml",  "applica:on/json","text/plain"})   @Produces({"applica:on/xml",  "applica:on/json","text/plain"})   @Path("operacionesMatema:cas")   public  class  OperacionesMatemaLcas  {        @GET    @Path("sumar/{numero_uno}/{numero_dos}")    public  String  sumar(@PathParam("numero_uno")Integer  n1,@PathParam("numero_dos")Integer  n2){      int  res=n1+n2;      return  ""+res;    }   }  
  30. 30. web.xml  jersey   <web-­‐app  xmlns="hYp://java.sun.com/xml/ns/javaee"  version="3.0"                    xmlns:xsi="hYp://www.w3.org/2001/XMLSchema-­‐instance"                    xsi:schemaLocaLon="hYp://java.sun.com/xml/ns/javaee  hYp://java.sun.com/xml/ns/javaee/web-­‐ app_3_0.xsd">            <servlet>                  <servlet-­‐name>ServletAdaptor</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>ServletAdaptor</servlet-­‐name>                  <url-­‐paYern>/resources/*</url-­‐paYern>          </servlet-­‐mapping>     </web-­‐app>  
  31. 31. WADL  de  ejemplo   hip://127.0.0.1:8080/demoRest/services/applica:on.wadl   hip://127.0.0.1:8080/demoRest/operacionesMatema:cas/services?_wadl   hip://127.0.0.1:8080/demoRest/operacionesMatema:cas/resources/applica:on.wadl   <?xml  version="1.0"  encoding="UTF-­‐8"  standalone="yes"?>   <applicaLon  xmlns="hYp://research.sun.com/wadl/2006/10">          <doc  xmlns:jersey="hYp://jersey.dev.java.net/"  jersey:generatedBy="Jersey:  1.0.3.1  08/14/2009  04:19  PM"/>          <resources  base="hYp://127.0.0.1:9090/demoRest/services/">                  <resource  path="operacionesMatemaLcas">                          <resource  path="sumar/{numero_uno}/{numero_dos}">                                  <param  xmlns:xs="hYp://www.w3.org/2001/XMLSchema"  type="xs:int"  style="template"   name="numero_uno"/>                                  <param  xmlns:xs="hYp://www.w3.org/2001/XMLSchema"  type="xs:int"  style="template"   name="numero_dos"/>                                  <method  name="GET"  id="sumar">                                          <response>                                                  <representaLon  mediaType="applicaLon/xml"/>                                                  <representaLon  mediaType="applicaLon/json"/>                                                  <representaLon  mediaType="text/plain"/>                                          </response>                                  </method>                          </resource>                  </resource>          </resources>   </applicaLon>  
  32. 32. Taller  desarrollo  de  servicios  Rest   S  Servicio  Operaciones  Matemá:cas   S  Sumar   S  Restar   S  Mul:plicar   S  Dividir   S  Cliente  del  servicio  
  33. 33. Taller  desarrollo  de  servicios  Rest   S  Servicio  Cliente   S  Crear   S  Modificar   S  Borrar   S  Consultar  por  ID   S  Consultar  Todos   S  Cliente  del  servicio  
  34. 34. ENLACES   S  hip://jersey.java.net/   S  hips://addons.mozilla.org/es-­‐ES/firefox/addon/ poster/   S  hip://www.w3.org/Submission/wadl/   S  hip://www.w3.org/Submission/2009/03/ Comment   S  hip://www.ibm.com/developerworks/ webservices/library/ws-­‐restwsdl/   S  hip://wadl.java.net/  
  35. 35. ENLACES   S  hip://webservices.xml.com/   S  hips://blueprints.dev.java.net/books.html  
  36. 36. Información  de  contacto   S  Si:o  Web:  www.vortexbird.com   S  Blog:  hip://blog.vortexbird.com   S  Contacto  vía  mail:  dgomez@vortexbird.com   S  Teléfonos:  +57    -­‐  (316  482  4629)   S  Cali,  Colombia  
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×