Servicios	
  Web	
  
RestFul	
  
Derechos	
  reservados	
  2015	
  
Que	
  es	
  un	
  WebService?	
  
S  Un	
  WebService	
  es	
  una	
  pieza	
  de	
  so9ware	
  
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	
  
Computación	
  distribuida	
  
Client-Server(C/S)
silos
Web-based computing
Servers
Clients
Clients
Servers
Internet
PDA Cell
Phone
Server
LaptopKiosk
Workstation
Web Services/Peer-to-Peer
SOA
computing
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
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
RestFul	
  
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	
  So9ware	
  basadas	
  en	
  Redes”	
  
S  Principios	
  arquitectónicos	
  de	
  so9ware	
  para	
  usar	
  a	
  la	
  
Web	
  como	
  una	
  plataforma	
  de	
  Procesamiento	
  
Distribuido	
  
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	
  
Historia	
  
S  Muchas	
  empresas	
  con	
  amplios	
  servicios	
  en	
  internet	
  
están	
  migrando	
  sus	
  servicios	
  a	
  Rest.	
  
S  Amazon	
  
S  Facebook	
  
S  Yahoo	
  
S  Twiter	
  
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	
  
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	
  
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.	
  
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.	
  
Expone	
  URIs	
  con	
  forma	
  de	
  directorios	
  
S  Direcciones	
  de	
  un	
  blog	
  
–  hdp://www.vortexbird.org/discusion/temas/{tema}	
  
–  hdp://www.vortexbird.org/discusion/{año}/{mes}/{dia}/{tema}	
  
–  hdp://www.vortexbird.org/discusion/2008/12/23/javaEE	
  
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.	
  
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>
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()"}
]
}
}}
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	
  
Web	
  Applica>on	
  Descrip>on	
  
Language	
  (WADL)	
  	
  
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.	
  
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="hdp://www.w3.org/2001/XMLSchema-­‐instance"	
  
04	
  	
  xmlns:xsd="hdp://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="hdp://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>	
  
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	
  
JAX-­‐RS	
  
S  Implementaciones	
  de	
  referencia.	
  
– Jersey	
  (Sun	
  Oracle)	
  
– CXF	
  (Apache)	
  
– RESTEasy	
  (Jboss)	
  
	
  
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	
  
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	
  
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	
  
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	
  
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	
  OperacionesMatema>cas	
  {	
  
	
  	
  
	
  @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;	
  
	
  }	
  
}	
  
hdp://127.0.0.1:8080/demoRest/services/operacionesMatema;cas/sumar/52/6	
  
web.xml	
  jersey	
  
<web-­‐app	
  xmlns="hgp://java.sun.com/xml/ns/javaee"	
  version="3.0"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  xmlns:xsi="hgp://www.w3.org/2001/XMLSchema-­‐instance"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  xsi:schemaLoca>on="hgp://java.sun.com/xml/ns/javaee	
  hgp://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-­‐pagern>/services/*</url-­‐pagern>	
  
	
  	
  	
  	
  </servlet-­‐mapping>	
  
	
  
</web-­‐app>	
  
WADL	
  de	
  ejemplo	
  
<?xml	
  version="1.0"	
  encoding="UTF-­‐8"	
  standalone="yes"?>	
  
<applica>on	
  xmlns="hgp://research.sun.com/wadl/2006/10">	
  
	
  	
  	
  	
  <doc	
  xmlns:jersey="hgp://jersey.dev.java.net/"	
  jersey:generatedBy="Jersey:	
  1.0.3.1	
  08/14/2009	
  04:19	
  PM"/>	
  
	
  	
  	
  	
  <resources	
  base="hgp://127.0.0.1:9090/demoRest/services/">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <resource	
  path="operacionesMatema>cas">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <resource	
  path="sumar/{numero_uno}/{numero_dos}">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param	
  xmlns:xs="hgp://www.w3.org/2001/XMLSchema"	
  type="xs:int"	
  style="template"	
  
name="numero_uno"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param	
  xmlns:xs="hgp://www.w3.org/2001/XMLSchema"	
  type="xs:int"	
  style="template"	
  
name="numero_dos"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <method	
  name="GET"	
  id="sumar">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <response>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <representa>on	
  mediaType="applica>on/xml"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <representa>on	
  mediaType="applica>on/json"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <representa>on	
  mediaType="text/plain"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </response>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </method>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </resource>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </resource>	
  
	
  	
  	
  	
  </resources>	
  
</applica>on>	
  
hdp://127.0.0.1:8080/demoRest/services/applica;on.wadl	
  
hdp://127.0.0.1:8080/demoRest/operacionesMatema;cas/services?_wadl	
  
hdp://127.0.0.1:8080/demoRest/operacionesMatema;cas/resources/applica;on.wadl	
  
Taller	
  desarrollo	
  de	
  servicios	
  Rest	
  
S  Servicio	
  Operaciones	
  Matemá;cas	
  
S  Sumar	
  
S  Restar	
  
S  Mul;plicar	
  
S  Dividir	
  
S  Cliente	
  del	
  servicio	
  
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	
  
ENLACES	
  
S  hdp://jersey.java.net/	
  
S  hdps://addons.mozilla.org/es-­‐ES/firefox/addon/
poster/	
  
S  hdp://www.w3.org/Submission/wadl/	
  
S  hdp://www.w3.org/Submission/2009/03/
Comment	
  
S  hdp://www.ibm.com/developerworks/
webservices/library/ws-­‐restwsdl/	
  
S  hdp://wadl.java.net/
ENLACES	
  
S  hdp://webservices.xml.com/	
  
S  hdps://blueprints.dev.java.net/books.html	
  
Información	
  de	
  contacto	
  
S  Si;o	
  Web:	
  www.vortexbird.com	
  
S  Blog:	
  hdp://blog.vortexbird.com	
  
S  Contacto	
  vía	
  mail:	
  dgomez@vortexbird.com	
  
S  Teléfonos:	
  +57	
  	
  -­‐	
  (316	
  482	
  4629)	
  
S  Cali,	
  Colombia	
  
Servicios Rest con Jersey

Más contenido relacionado

PDF
Web services restful con JAX-RS
PDF
Servicios Web Rest con Spring MVC
ODT
Web Services JAX-RS RESTful y SOAP
PDF
Tutorial - REST con java (JAX-RS 2.0)
PPTX
Java WebServices JaxWS - JaxRs
PPTX
REST, JERSEY & SOAP
PDF
Facelets
PPTX
Automatic API REST Droidcon
Web services restful con JAX-RS
Servicios Web Rest con Spring MVC
Web Services JAX-RS RESTful y SOAP
Tutorial - REST con java (JAX-RS 2.0)
Java WebServices JaxWS - JaxRs
REST, JERSEY & SOAP
Facelets
Automatic API REST Droidcon

La actualidad más candente (20)

PPTX
Introducción a REST - SymfonyVLC
PDF
Servicios web java php-perl-google
PPTX
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
PPT
Curso TIC de PHP y MSQL
PDF
7/9 Curso JEE5, Soa, Web Services, ESB y XML
DOCX
Arquitectura Rest
PPT
Desarrollando Una Mejor Experiencia De Usuario Con Ajax
PPTX
Soap eduardo cano
PDF
Servicios web en php, perl, java
PDF
Introducción a las API's Rest
PPTX
Arquitectura REST
PDF
Programación web con JSP
PDF
Java Primeros Pasos Revista- Edición 2
PDF
Servicios web Extendido_error perl
PPT
Servlets y jsp
PDF
Primefaces
PDF
WORKSHOP I: Introducción a API REST
PPTX
introduccion a Ajax
PDF
Programacion web java
PDF
Servicios web
Introducción a REST - SymfonyVLC
Servicios web java php-perl-google
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
Curso TIC de PHP y MSQL
7/9 Curso JEE5, Soa, Web Services, ESB y XML
Arquitectura Rest
Desarrollando Una Mejor Experiencia De Usuario Con Ajax
Soap eduardo cano
Servicios web en php, perl, java
Introducción a las API's Rest
Arquitectura REST
Programación web con JSP
Java Primeros Pasos Revista- Edición 2
Servicios web Extendido_error perl
Servlets y jsp
Primefaces
WORKSHOP I: Introducción a API REST
introduccion a Ajax
Programacion web java
Servicios web
Publicidad

Similar a Servicios Rest con Jersey (20)

PDF
PDF
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
PPT
Servicios Web II.ppt
ODP
Desarrollando un API con REST
DOCX
Servicios web
PPT
01 Ext Js Introduccion
PDF
Servicio web java php perl google
PDF
Servicios web java, php, perl, google
PDF
Web services SOAP con JAX-WS
DOCX
Servicios web
PPT
J2 Ee Para Seres Humanos Slides
PPTX
Servicios web
PPT
Ruby y las arquitecturas orientadas a servicios
PPT
SOAP y Web Services
PDF
Rest Conf Rails
DOCX
PPT
Conceptos Introductorios Del Web 2
PPTX
Tecnologías web.pptx
PPT
Conceptos acerca de Ajax
PPT
Webservices
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Servicios Web II.ppt
Desarrollando un API con REST
Servicios web
01 Ext Js Introduccion
Servicio web java php perl google
Servicios web java, php, perl, google
Web services SOAP con JAX-WS
Servicios web
J2 Ee Para Seres Humanos Slides
Servicios web
Ruby y las arquitecturas orientadas a servicios
SOAP y Web Services
Rest Conf Rails
Conceptos Introductorios Del Web 2
Tecnologías web.pptx
Conceptos acerca de Ajax
Webservices
Publicidad

Más de Vortexbird (10)

PDF
Spring security 2017
PDF
Spring ORM JPA
PDF
Spring framework core 2017
PDF
Bean validation 2017
PDF
Introduccion a JPA
PDF
Log en Aplicaciones Java y JavaEE
PPT
Vb.pd.zathuracode.v5.0.1
PPT
Zathuracode Version 5.0.0
PPTX
Orm hibernate springframework
PPTX
Introducccion springframework
Spring security 2017
Spring ORM JPA
Spring framework core 2017
Bean validation 2017
Introduccion a JPA
Log en Aplicaciones Java y JavaEE
Vb.pd.zathuracode.v5.0.1
Zathuracode Version 5.0.0
Orm hibernate springframework
Introducccion springframework

Último (9)

PDF
Presentacion de compiladores e interpretes
PPTX
Implementación equipo monitor12.08.25.pptx
PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PPTX
presentación de introducción a las metodologías agiles .pptx
PPTX
PROPIEDADES Y METODOS DE PrOO CON PYTHON
PDF
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES
PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PPTX
Control de seguridad en los sitios web.pptx
PPTX
hojas_de_calculo_aplicado para microsoft office
Presentacion de compiladores e interpretes
Implementación equipo monitor12.08.25.pptx
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
presentación de introducción a las metodologías agiles .pptx
PROPIEDADES Y METODOS DE PrOO CON PYTHON
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
Control de seguridad en los sitios web.pptx
hojas_de_calculo_aplicado para microsoft office

Servicios Rest con Jersey

  • 1. Servicios  Web   RestFul   Derechos  reservados  2015  
  • 2. Que  es  un  WebService?   S  Un  WebService  es  una  pieza  de  so9ware   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. Computación  distribuida   Client-Server(C/S) silos Web-based computing Servers Clients Clients Servers Internet PDA Cell Phone Server LaptopKiosk Workstation Web Services/Peer-to-Peer SOA computing
  • 4. 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
  • 5. 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
  • 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  So9ware  basadas  en  Redes”   S  Principios  arquitectónicos  de  so9ware  para  usar  a  la   Web  como  una  plataforma  de  Procesamiento   Distribuido  
  • 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. Historia   S  Muchas  empresas  con  amplios  servicios  en  internet   están  migrando  sus  servicios  a  Rest.   S  Amazon   S  Facebook   S  Yahoo   S  Twiter  
  • 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. 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. 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. 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. Expone  URIs  con  forma  de  directorios   S  Direcciones  de  un  blog   –  hdp://www.vortexbird.org/discusion/temas/{tema}   –  hdp://www.vortexbird.org/discusion/{año}/{mes}/{dia}/{tema}   –  hdp://www.vortexbird.org/discusion/2008/12/23/javaEE  
  • 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   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.  
  • 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. 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. 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. Web  Applica>on  Descrip>on   Language  (WADL)    
  • 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. 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="hdp://www.w3.org/2001/XMLSchema-­‐instance"   04    xmlns:xsd="hdp://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="hdp://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>  
  • 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. JAX-­‐RS   S  Implementaciones  de  referencia.   – Jersey  (Sun  Oracle)   – CXF  (Apache)   – RESTEasy  (Jboss)    
  • 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. 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. 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. 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. 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  OperacionesMatema>cas  {        @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;    }   }   hdp://127.0.0.1:8080/demoRest/services/operacionesMatema;cas/sumar/52/6  
  • 30. web.xml  jersey   <web-­‐app  xmlns="hgp://java.sun.com/xml/ns/javaee"  version="3.0"                    xmlns:xsi="hgp://www.w3.org/2001/XMLSchema-­‐instance"                    xsi:schemaLoca>on="hgp://java.sun.com/xml/ns/javaee  hgp://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-­‐pagern>/services/*</url-­‐pagern>          </servlet-­‐mapping>     </web-­‐app>  
  • 31. WADL  de  ejemplo   <?xml  version="1.0"  encoding="UTF-­‐8"  standalone="yes"?>   <applica>on  xmlns="hgp://research.sun.com/wadl/2006/10">          <doc  xmlns:jersey="hgp://jersey.dev.java.net/"  jersey:generatedBy="Jersey:  1.0.3.1  08/14/2009  04:19  PM"/>          <resources  base="hgp://127.0.0.1:9090/demoRest/services/">                  <resource  path="operacionesMatema>cas">                          <resource  path="sumar/{numero_uno}/{numero_dos}">                                  <param  xmlns:xs="hgp://www.w3.org/2001/XMLSchema"  type="xs:int"  style="template"   name="numero_uno"/>                                  <param  xmlns:xs="hgp://www.w3.org/2001/XMLSchema"  type="xs:int"  style="template"   name="numero_dos"/>                                  <method  name="GET"  id="sumar">                                          <response>                                                  <representa>on  mediaType="applica>on/xml"/>                                                  <representa>on  mediaType="applica>on/json"/>                                                  <representa>on  mediaType="text/plain"/>                                          </response>                                  </method>                          </resource>                  </resource>          </resources>   </applica>on>   hdp://127.0.0.1:8080/demoRest/services/applica;on.wadl   hdp://127.0.0.1:8080/demoRest/operacionesMatema;cas/services?_wadl   hdp://127.0.0.1:8080/demoRest/operacionesMatema;cas/resources/applica;on.wadl  
  • 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. 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. ENLACES   S  hdp://jersey.java.net/   S  hdps://addons.mozilla.org/es-­‐ES/firefox/addon/ poster/   S  hdp://www.w3.org/Submission/wadl/   S  hdp://www.w3.org/Submission/2009/03/ Comment   S  hdp://www.ibm.com/developerworks/ webservices/library/ws-­‐restwsdl/   S  hdp://wadl.java.net/
  • 35. ENLACES   S  hdp://webservices.xml.com/   S  hdps://blueprints.dev.java.net/books.html  
  • 36. Información  de  contacto   S  Si;o  Web:  www.vortexbird.com   S  Blog:  hdp://blog.vortexbird.com   S  Contacto  vía  mail:  dgomez@vortexbird.com   S  Teléfonos:  +57    -­‐  (316  482  4629)   S  Cali,  Colombia