36
Servicios Web RestFul Diego Armando Gómez M. [email protected] 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

Web services restful con JAX-RS

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Web services restful con JAX-RS

Servicios  Web  RestFul  

Diego  Armando  Gómez  M.  [email protected]  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  

Page 2: Web services restful con JAX-RS

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  

Page 3: Web services restful con JAX-RS

Computación  distribuida  

Client-Server(C/S) silos

Web-based computing

Servers

Clients

Clients

Servers

Internet

PDA Cell Phone

Server

Laptop Kiosk

Workstation

Web Services/Peer-to-Peer

SOA computing

Page 4: Web services restful con JAX-RS

Tradicional  C/S  vs.  Servicios  Web  

" Within enterprise " Tied to a set of programming languages " Procedural " Usually bound to a particular transport " Tightly-coupled " Efficient processing (space/time)

"  Between enterprises "  Program language independent "  Message-driven "  Easily bound to different transports "  Loosely-coupled "  Relatively not efficient processing

Traditional C/S Web Service

Page 5: Web services restful con JAX-RS

Web  Applica:on  vs.  Web  Services  

" User-to-program interaction " Static integration of components " Monolithic service

"  Program-to-program interaction "  Possibility of dynamic integration of components (in the future) "  Possibility of service aggregation (in the future)

Web Application Web Service

Page 6: Web services restful con JAX-RS

RestFul  

Page 7: Web services restful con JAX-RS

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  

Page 8: Web services restful con JAX-RS

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  

Page 9: Web services restful con JAX-RS

Historia  

S Muchas  empresas  con  amplios  servicios  en  internet  están  migrando  sus  servicios  a  Rest.  S  Amazon  S  Facebook  S  Yahoo  S  Twiter  

Page 10: Web services restful con JAX-RS

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  

Page 11: Web services restful con JAX-RS

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  

Page 12: Web services restful con JAX-RS

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.  

Page 13: Web services restful con JAX-RS

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.  

Page 14: Web services restful con JAX-RS

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  

Page 15: Web services restful con JAX-RS

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  

extensión  de  archivos  (.jsp,  .php,  .asp),  de  manera  de  poder  portar  la  solución  a  otra  tecnología  sin  cambiar  las  URI.  

S  Mantener  todo  el  uri  en  minúsculas.  S  Sus:tuir  los  espacios  con  guiones  o  guiones  bajos  (uno  u  otro).  S  Evitar  el  uso  de  strings  de  consulta.  S  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.  

S  URI  está:co  deforma  que  los  usuarios  puedan  crear  favoritos"  o  bookmarks.  

Page 16: Web services restful con JAX-RS

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>

Page 17: Web services restful con JAX-RS

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()"} ] } }}

Page 18: Web services restful con JAX-RS

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  

Page 19: Web services restful con JAX-RS

Web  Applica:on  Descrip:on  Language  (WADL)    

Page 20: Web services restful con JAX-RS

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.  

Page 21: Web services restful con JAX-RS

Web  Applica:on  Descrip:on  Language  (WADL)    •  Yahoo  news  search  

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>  

Page 22: Web services restful con JAX-RS

JAX-­‐RS  

Page 23: Web services restful con JAX-RS

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  

Page 24: Web services restful con JAX-RS

JAX-­‐RS  

S  Implementaciones  de  referencia.  –  Jersey  (Sun  Oracle)  – CXF  (Apache)  – RESTEasy  (Jboss)    

Page 25: Web services restful con JAX-RS

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  

Page 26: Web services restful con JAX-RS

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  

Page 27: Web services restful con JAX-RS

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  

Page 28: Web services restful con JAX-RS

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  

Page 29: Web services restful con JAX-RS

Código  de  ejemplo  

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;    }  

}  

hip://127.0.0.1:8080/demoRest/services/operacionesMatema:cas/sumar/52/6  

Page 30: Web services restful con JAX-RS

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>  

Page 31: Web services restful con JAX-RS

WADL  de  ejemplo  

<?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>  

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  

Page 32: Web services restful con JAX-RS

Taller  desarrollo  de  servicios  Rest  

S  Servicio  Operaciones  Matemá:cas  S  Sumar  S  Restar  S  Mul:plicar  S  Dividir  

S  Cliente  del  servicio  

Page 33: Web services restful con JAX-RS

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  

Page 34: Web services restful con JAX-RS

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/  

Page 35: Web services restful con JAX-RS

ENLACES  

S  hip://webservices.xml.com/  S  hips://blueprints.dev.java.net/books.html  

Page 36: Web services restful con JAX-RS

Información  de  contacto  

S  Si:o  Web:  www.vortexbird.com  S  Blog:  hip://blog.vortexbird.com  S  Contacto  vía  mail:  [email protected]  S  Teléfonos:  +57    -­‐  (316  482  4629)  S  Cali,  Colombia