SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
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>	
  
Spring	
  MVC	
  
Spring	
  Framework	
  
Spring	
  MVC	
  
S  Spring	
  MVC	
  es	
  uno	
  de	
  los	
  módulos	
  del	
  framework	
  
spring.	
  
S  Implementación	
  del	
  patrón	
  modelo	
  vista	
  control	
  
S  Cuenta	
  con	
  soporte	
  para	
  costruccion	
  de	
  servicios	
  
REST	
  
S  Modular,	
  simple	
  de	
  usar	
  y	
  configurar.	
  
S  Es	
  basado	
  en	
  las	
  anotaciones	
  @Controller	
  y	
  
@RequestMapping	
  
Spring	
  MVC	
  
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	
  
Spring	
  MVC	
  
Anotaciones	
  Spring	
  MVC	
  
Anotación	
   Descripción	
  
@RequestMapping(method	
  =	
  
RequestMethod.GET)	
  
Marca	
  el	
  método	
  como	
  accesible	
  a	
  través	
  del	
  
método	
  GET	
  de	
  HTTP	
  
@RequestMapping(method	
  =	
  
RequestMethod.POST)	
  
Marca	
  el	
  método	
  como	
  accesible	
  a	
  través	
  del	
  
método	
  POST	
  de	
  HTTP	
  
@RequestMapping(method	
  =	
  
RequestMethod.PUT)	
  
Marca	
  el	
  método	
  como	
  accesible	
  a	
  través	
  del	
  
método	
  PUT	
  de	
  HTTP	
  
@RequestMapping(method	
  =	
  
RequestMethod.DELETE)	
  
Marca	
  el	
  método	
  como	
  accesible	
  a	
  través	
  del	
  
método	
  DELETE	
  de	
  HTTP	
  
@RequestMapping(method	
  =	
  
RequestMethod.HEAD)	
  
Marca	
  el	
  método	
  como	
  accesible	
  a	
  través	
  del	
  
método	
  HEAD	
  de	
  HTTP	
  
Anotaciones	
  Spring	
  MVC	
  
Anotación	
   Descripción	
  
@RequestMapping	
   Indica	
  donde	
  queda	
  alojada	
  la	
  clase	
  o	
  el	
  método.	
  Por	
  
ejemplo	
  /holaMundo/	
  
@PathVariable	
   Se	
  usa	
  para	
  asignar	
  a	
  los	
  parámetros	
  de	
  los	
  métodos	
  el	
  
nombre	
  del	
  path	
  usado.	
  
consumes="applica;on/
json"	
  
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"	
  
produce="applica;on/
json"	
  
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“	
  
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	
  
Maven	
  1/2	
  
	
   	
  <!-­‐-­‐	
  Jackson	
  JSON	
  Mapper	
  -­‐-­‐>	
  
	
   	
  <dependency>	
  
	
   	
   	
  <groupId>org.codehaus.jackson</groupId>	
  
	
   	
   	
  <ar>factId>jackson-­‐mapper-­‐asl</ar>factId>	
  
	
   	
   	
  <version>1.9.13</version>	
  
	
   	
  </dependency>	
  
	
  
	
   	
  <dependency>	
  
	
   	
   	
  <groupId>com.fasterxml.jackson.core</groupId>	
  
	
   	
   	
  <ar>factId>jackson-­‐core</ar>factId>	
  
	
   	
   	
  <version>2.5.1</version>	
  
	
   	
  </dependency>	
  
	
  
	
   	
  <dependency>	
  
	
   	
   	
  <groupId>com.fasterxml.jackson.core</groupId>	
  
	
   	
   	
  <ar>factId>jackson-­‐databind</ar>factId>	
  
	
   	
   	
  <version>2.5.1</version>	
  
	
   	
  </dependency>	
  
	
   	
  <!-­‐-­‐	
  Jackson	
  JSON	
  Mapper	
  -­‐-­‐>	
  
Maven	
  2/2	
  
	
  <proper>es>	
  
	
   	
  <spring.version>4.1.5.RELEASE</spring.version>	
  
	
  </proper>es>	
  
	
  	
  
	
  <dependencies>	
  
	
   	
  <dependency>	
  
	
   	
   	
  <groupId>org.springframework</groupId>	
  
	
   	
   	
  <ar>factId>spring-­‐core</ar>factId>	
  
	
   	
   	
  <version>${spring.version}</version>	
  
	
   	
  </dependency>	
  
	
  	
  
	
   	
  <dependency>	
  
	
   	
   	
  <groupId>org.springframework</groupId>	
  
	
   	
   	
  <ar>factId>spring-­‐web</ar>factId>	
  
	
   	
   	
  <version>${spring.version}</version>	
  
	
   	
  </dependency>	
  
	
  	
  
	
   	
  <dependency>	
  
	
   	
   	
  <groupId>org.springframework</groupId>	
  
	
   	
   	
  <ar>factId>spring-­‐webmvc</ar>factId>	
  
	
   	
   	
  <version>${spring.version}</version>	
  
	
   	
  </dependency>	
  
	
  </dependencies>	
  
mvc-­‐dispatcher-­‐servlet.xml	
  
<?xml	
  version='1.0'	
  encoding='UTF-­‐8'	
  ?>	
  
<beans	
  xmlns="h7p://www.springframework.org/schema/beans"	
  
	
  xmlns:xsi="h7p://www.w3.org/2001/XMLSchema-­‐instance"	
  
	
  xmlns:context="h7p://www.springframework.org/schema/context"	
  
	
  xmlns:mvc="h7p://www.springframework.org/schema/mvc"	
  
	
  xsi:schemaLoca;on="h7p://www.springframework.org/schema/mvc	
  	
  
	
  h7p://www.springframework.org/schema/mvc/spring-­‐mvc-­‐4.1.xsd	
  
	
   	
  h7p://www.springframework.org/schema/beans	
  
	
   	
  	
  h7p://www.springframework.org/schema/beans/spring-­‐beans-­‐4.1.xsd	
  
	
   	
  h7p://www.springframework.org/schema/context	
  	
  
	
   	
  h7p://www.springframework.org/schema/context/spring-­‐context-­‐4.1.xsd">	
  
	
  
	
  <context:component-­‐scan	
  base-­‐package="com.vobi.demo.mvc.controller"	
  />	
  
	
  <mvc:annota;on-­‐driven	
  />	
  
	
  
</beans>	
  
web.xml	
  
<web-­‐app> 	
  	
  
	
  <listener>	
  
	
   	
  <listener-­‐class>org.springframework.web.context.ContextLoaderListener</listener-­‐class>	
  
	
  </listener>	
  
	
  
	
  <listener>	
  
	
   	
  <listener-­‐class>org.springframework.web.context.request.RequestContextListener</listener-­‐class>	
  
	
  </listener>	
  
	
  
	
  <context-­‐param>	
  
	
   	
  <param-­‐name>contextConfigLoca>on</param-­‐name>	
  
	
   	
  <param-­‐value>classpath*:/applica>onContext.xml,classpath*:/mvc-­‐dispatcher-­‐servlet.xml</param-­‐value>	
  
	
  </context-­‐param>	
  
	
  	
  
	
  <!-­‐-­‐	
  MVC	
  -­‐-­‐>	
  
	
  <servlet>	
  
	
   	
  <servlet-­‐name>mvc-­‐dispatcher</servlet-­‐name>	
  
	
   	
  <servlet-­‐class>org.springframework.web.servlet.DispatcherServlet</servlet-­‐class>	
  
	
   	
  <load-­‐on-­‐startup>1</load-­‐on-­‐startup>	
  
	
  </servlet>	
  
	
  
	
  <servlet-­‐mapping>	
  
	
   	
  <servlet-­‐name>mvc-­‐dispatcher</servlet-­‐name>	
  
	
   	
  <url-­‐pajern>/controller/*</url-­‐pajern>	
  
	
  </servlet-­‐mapping>	
  
	
  <!-­‐-­‐	
  MVC	
  à	
  
</web-­‐app>	
  
Código	
  de	
  ejemplo	
  Servicio	
  
@Controller	
  
@RequestMapping("/operacionesMatema>cas")	
  
public	
  class	
  OperacionesMatema>cas	
  {	
  
	
  	
  
	
  @RequestMapping(value="/sumar/{numeroUno}/{numeroDos}",	
  method	
  =	
  RequestMethod.GET)	
  
	
  public	
  @ResponseBody	
  Resultado	
  sumar(@PathVariable	
  Integer	
  numeroUno,	
  @PathVariable	
  Integer	
  
numeroDos,ModelMap	
  model)	
  {	
  
	
   	
  Resultado	
  resultado=new	
  Resultado();	
  
	
   	
  resultado.setResultado(numeroUno+numeroDos);	
  
	
   	
  return	
  resultado;	
  
	
  }	
  
	
  	
  
}	
  
hdp://127.0.0.1:8080/demoRestSpringMVC/controller/operacionesMatema;cas/sumar/3/4	
  
Código	
  de	
  ejemplo	
  Cliente	
  
@RunWith(SpringJUnit4ClassRunner.class)	
  
@ContextConfigura;on("/applica;onContext.xml")	
  
public	
  class	
  ClienteOperacionesMatema>cas	
  {	
  
	
  
	
  @Test	
  
	
  public	
  void	
  test()	
  {	
  
	
   	
  RestTemplate	
  restTemplate	
  =	
  new	
  RestTemplate();	
  
	
   	
  Resultado	
  resultado=restTemplate.getForObject("hdp://127.0.0.1:8080/demoRestSpringMVC/
controller/operacionesMatema;cas/sumar/3/4",Resultado.class);	
  
	
   	
  assertEquals(resultado.getResultado(),	
  new	
  Integer(7));	
  
	
   	
  System.out.println(resultado.getResultado());	
  
	
  }	
  
	
  
}	
  
hdp://127.0.0.1:8080/demoRestSpringMVC/controller/operacionesMatema;cas/sumar/3/4	
  
WADL	
  de	
  ejemplo	
  
<?xml	
  version="1.0"	
  encoding="UTF-­‐8"	
  standalone="yes"?>	
  
<applica>on	
  xmlns="hjp://research.sun.com/wadl/2006/10">	
  
	
  	
  	
  	
  <doc	
  xmlns:jersey="hjp://jersey.dev.java.net/"	
  jersey:generatedBy="Jersey:	
  1.0.3.1	
  08/14/2009	
  04:19	
  PM"/>	
  
	
  	
  	
  	
  <resources	
  base="hjp://127.0.0.1:9090/demoRest/services/">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <resource	
  path="operacionesMatema>cas">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <resource	
  path="sumar/{numero_uno}/{numero_dos}">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param	
  xmlns:xs="hjp://www.w3.org/2001/XMLSchema"	
  type="xs:int"	
  style="template"	
  
name="numero_uno"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <param	
  xmlns:xs="hjp://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	
  Operaciones	
  Matema;cas	
  
Taller	
  desarrollo	
  de	
  servicios	
  Rest	
  
S  Servicio	
  de	
  En;dad	
  para	
  Cliente	
  
S  Crear	
  
S  Modificar	
  
S  Borrar	
  
S  Consultar	
  por	
  ID	
  
S  Consultar	
  Todos	
  
S  Cliente	
  del	
  servicio	
  Rest	
  
ENLACES	
  
S  hdp://docs.spring.io/spring-­‐framework/docs/
current/spring-­‐framework-­‐reference/html/
mvc.html#mvc-­‐introduc;on	
  
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 Web Rest con Spring MVC

Más contenido relacionado

La actualidad más candente

REST, JERSEY & SOAP
REST, JERSEY & SOAPREST, JERSEY & SOAP
REST, JERSEY & SOAPea2014G3
 
Java WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRsJava WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRsHernan Rengifo
 
Curso TIC de PHP y MSQL
Curso TIC de PHP y MSQLCurso TIC de PHP y MSQL
Curso TIC de PHP y MSQLWilian
 
primefaces cortesia del portal de java
primefaces cortesia del portal de javaprimefaces cortesia del portal de java
primefaces cortesia del portal de javaSalvador Olivares
 
Desarrollando Una Mejor Experiencia De Usuario Con Ajax
Desarrollando Una Mejor Experiencia De Usuario Con AjaxDesarrollando Una Mejor Experiencia De Usuario Con Ajax
Desarrollando Una Mejor Experiencia De Usuario Con Ajaxjuliocasal
 
Servicios web en php, perl, java
Servicios web en php, perl, javaServicios web en php, perl, java
Servicios web en php, perl, javaFaby Marcos Solis
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...JaenFrankcezco
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan phpCarlos Zantana
 
Servicios web java php-perl-google
Servicios web java php-perl-googleServicios web java php-perl-google
Servicios web java php-perl-googleJosue Hernandez
 
Apache click
Apache clickApache click
Apache clickntomasto
 
STRUTS (MVC e Java)
STRUTS (MVC e Java)STRUTS (MVC e Java)
STRUTS (MVC e Java)ousli07
 
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLDesarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLJosé Alfredo Ramírez
 
Programación web con JSP
Programación web con JSPProgramación web con JSP
Programación web con JSPousli07
 

La actualidad más candente (20)

Rest
RestRest
Rest
 
REST, JERSEY & SOAP
REST, JERSEY & SOAPREST, JERSEY & SOAP
REST, JERSEY & SOAP
 
Java WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRsJava WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRs
 
Curso TIC de PHP y MSQL
Curso TIC de PHP y MSQLCurso TIC de PHP y MSQL
Curso TIC de PHP y MSQL
 
primefaces cortesia del portal de java
primefaces cortesia del portal de javaprimefaces cortesia del portal de java
primefaces cortesia del portal de java
 
Desarrollando Una Mejor Experiencia De Usuario Con Ajax
Desarrollando Una Mejor Experiencia De Usuario Con AjaxDesarrollando Una Mejor Experiencia De Usuario Con Ajax
Desarrollando Una Mejor Experiencia De Usuario Con Ajax
 
Servicios web en php, perl, java
Servicios web en php, perl, javaServicios web en php, perl, java
Servicios web en php, perl, java
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
 
Servicios web java php-perl-google
Servicios web java php-perl-googleServicios web java php-perl-google
Servicios web java php-perl-google
 
Apache click
Apache clickApache click
Apache click
 
STRUTS (MVC e Java)
STRUTS (MVC e Java)STRUTS (MVC e Java)
STRUTS (MVC e Java)
 
Web services y java
Web services y javaWeb services y java
Web services y java
 
Introducción a las API's Rest
Introducción a las API's RestIntroducción a las API's Rest
Introducción a las API's Rest
 
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLDesarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
 
Servicios web java, php, perl, google
Servicios web java, php, perl, googleServicios web java, php, perl, google
Servicios web java, php, perl, google
 
Programación web con JSP
Programación web con JSPProgramación web con JSP
Programación web con JSP
 
Asp
AspAsp
Asp
 
Dreamweaver
DreamweaverDreamweaver
Dreamweaver
 
WebAttack - Presentación
WebAttack - PresentaciónWebAttack - Presentación
WebAttack - Presentación
 

Destacado

Log en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEELog en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEEVortexbird
 
Tripletas
TripletasTripletas
Tripletasakpaz1
 
Design REST-ful Web Service
Design REST-ful Web ServiceDesign REST-ful Web Service
Design REST-ful Web ServiceKevingo Tsai
 
Lenguaje de recuperación de datos en la web (sparql)
Lenguaje de recuperación de datos en la web (sparql)Lenguaje de recuperación de datos en la web (sparql)
Lenguaje de recuperación de datos en la web (sparql)Hugo Peña
 
Mejores prácticas para testing de aplicaciones
Mejores prácticas para testing de aplicacionesMejores prácticas para testing de aplicaciones
Mejores prácticas para testing de aplicacionesSoftware Guru
 
Spring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSpring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSam Brannen
 

Destacado (7)

Log en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEELog en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEE
 
Tripletas
TripletasTripletas
Tripletas
 
Design REST-ful Web Service
Design REST-ful Web ServiceDesign REST-ful Web Service
Design REST-ful Web Service
 
Lenguaje de recuperación de datos en la web (sparql)
Lenguaje de recuperación de datos en la web (sparql)Lenguaje de recuperación de datos en la web (sparql)
Lenguaje de recuperación de datos en la web (sparql)
 
Practica cliente servidor java
Practica cliente servidor javaPractica cliente servidor java
Practica cliente servidor java
 
Mejores prácticas para testing de aplicaciones
Mejores prácticas para testing de aplicacionesMejores prácticas para testing de aplicaciones
Mejores prácticas para testing de aplicaciones
 
Spring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSpring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. REST
 

Similar a Servicios Web Rest con Spring MVC

Servicios Web II.ppt
Servicios Web II.pptServicios Web II.ppt
Servicios Web II.pptDiegoRomn20
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con RESTAlex Puig
 
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)Iniciativa Barcelona Open Data
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTBEEVA_es
 
01 Ext Js Introduccion
01 Ext Js   Introduccion01 Ext Js   Introduccion
01 Ext Js IntroduccionMayer Horna
 
J2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos SlidesJ2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos Slidesmundojava
 
Servicio web java php perl google
Servicio web  java php perl googleServicio web  java php perl google
Servicio web java php perl googleSeveredDRA
 
Web services SOAP con JAX-WS
Web services SOAP con JAX-WSWeb services SOAP con JAX-WS
Web services SOAP con JAX-WSVortexbird
 
Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios Joaquín Salvachúa
 
Integración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxIntegración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxLuisTenorio42
 

Similar a Servicios Web Rest con Spring MVC (20)

Servicios web
Servicios webServicios web
Servicios web
 
Servicios Web II.ppt
Servicios Web II.pptServicios Web II.ppt
Servicios Web II.ppt
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
Servicios web
Servicios webServicios web
Servicios web
 
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API REST
 
01 Ext Js Introduccion
01 Ext Js   Introduccion01 Ext Js   Introduccion
01 Ext Js Introduccion
 
introduccion a Ajax
introduccion a Ajaxintroduccion a Ajax
introduccion a Ajax
 
J2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos SlidesJ2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos Slides
 
Servicios web
Servicios webServicios web
Servicios web
 
Servicio web java php perl google
Servicio web  java php perl googleServicio web  java php perl google
Servicio web java php perl google
 
Web services SOAP con JAX-WS
Web services SOAP con JAX-WSWeb services SOAP con JAX-WS
Web services SOAP con JAX-WS
 
Servicios web
Servicios webServicios web
Servicios web
 
Servicios web
Servicios webServicios web
Servicios web
 
Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios
 
Rest Conf Rails
Rest Conf RailsRest Conf Rails
Rest Conf Rails
 
SEVILLA Meetups29112022_sh.pptx
SEVILLA Meetups29112022_sh.pptxSEVILLA Meetups29112022_sh.pptx
SEVILLA Meetups29112022_sh.pptx
 
Servicios web Extendido_error perl
Servicios web Extendido_error perlServicios web Extendido_error perl
Servicios web Extendido_error perl
 
Big Data en Azure: Azure Data Lake
Big Data en Azure: Azure Data LakeBig Data en Azure: Azure Data Lake
Big Data en Azure: Azure Data Lake
 
Integración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxIntegración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptx
 

Más de Vortexbird

Spring security 2017
Spring security 2017Spring security 2017
Spring security 2017Vortexbird
 
Spring ORM JPA
Spring ORM JPASpring ORM JPA
Spring ORM JPAVortexbird
 
Spring framework core 2017
Spring framework core 2017Spring framework core 2017
Spring framework core 2017Vortexbird
 
Bean validation 2017
Bean validation 2017Bean validation 2017
Bean validation 2017Vortexbird
 
Introduccion a JPA
Introduccion a JPAIntroduccion a JPA
Introduccion a JPAVortexbird
 
Vb.pd.zathuracode.v5.0.1
Vb.pd.zathuracode.v5.0.1Vb.pd.zathuracode.v5.0.1
Vb.pd.zathuracode.v5.0.1Vortexbird
 
Zathuracode Version 5.0.0
Zathuracode Version 5.0.0Zathuracode Version 5.0.0
Zathuracode Version 5.0.0Vortexbird
 
Orm hibernate springframework
Orm hibernate springframeworkOrm hibernate springframework
Orm hibernate springframeworkVortexbird
 
Introducccion springframework
Introducccion springframeworkIntroducccion springframework
Introducccion springframeworkVortexbird
 

Más de Vortexbird (9)

Spring security 2017
Spring security 2017Spring security 2017
Spring security 2017
 
Spring ORM JPA
Spring ORM JPASpring ORM JPA
Spring ORM JPA
 
Spring framework core 2017
Spring framework core 2017Spring framework core 2017
Spring framework core 2017
 
Bean validation 2017
Bean validation 2017Bean validation 2017
Bean validation 2017
 
Introduccion a JPA
Introduccion a JPAIntroduccion a JPA
Introduccion a JPA
 
Vb.pd.zathuracode.v5.0.1
Vb.pd.zathuracode.v5.0.1Vb.pd.zathuracode.v5.0.1
Vb.pd.zathuracode.v5.0.1
 
Zathuracode Version 5.0.0
Zathuracode Version 5.0.0Zathuracode Version 5.0.0
Zathuracode Version 5.0.0
 
Orm hibernate springframework
Orm hibernate springframeworkOrm hibernate springframework
Orm hibernate springframework
 
Introducccion springframework
Introducccion springframeworkIntroducccion springframework
Introducccion springframework
 

Servicios Web Rest con Spring MVC

  • 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>  
  • 24. Spring  MVC   S  Spring  MVC  es  uno  de  los  módulos  del  framework   spring.   S  Implementación  del  patrón  modelo  vista  control   S  Cuenta  con  soporte  para  costruccion  de  servicios   REST   S  Modular,  simple  de  usar  y  configurar.   S  Es  basado  en  las  anotaciones  @Controller  y   @RequestMapping  
  • 25. Spring  MVC   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  
  • 27. Anotaciones  Spring  MVC   Anotación   Descripción   @RequestMapping(method  =   RequestMethod.GET)   Marca  el  método  como  accesible  a  través  del   método  GET  de  HTTP   @RequestMapping(method  =   RequestMethod.POST)   Marca  el  método  como  accesible  a  través  del   método  POST  de  HTTP   @RequestMapping(method  =   RequestMethod.PUT)   Marca  el  método  como  accesible  a  través  del   método  PUT  de  HTTP   @RequestMapping(method  =   RequestMethod.DELETE)   Marca  el  método  como  accesible  a  través  del   método  DELETE  de  HTTP   @RequestMapping(method  =   RequestMethod.HEAD)   Marca  el  método  como  accesible  a  través  del   método  HEAD  de  HTTP  
  • 28. Anotaciones  Spring  MVC   Anotación   Descripción   @RequestMapping   Indica  donde  queda  alojada  la  clase  o  el  método.  Por   ejemplo  /holaMundo/   @PathVariable   Se  usa  para  asignar  a  los  parámetros  de  los  métodos  el   nombre  del  path  usado.   consumes="applica;on/ json"   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"   produce="applica;on/ json"   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“  
  • 29. 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  
  • 30. Maven  1/2      <!-­‐-­‐  Jackson  JSON  Mapper  -­‐-­‐>      <dependency>        <groupId>org.codehaus.jackson</groupId>        <ar>factId>jackson-­‐mapper-­‐asl</ar>factId>        <version>1.9.13</version>      </dependency>        <dependency>        <groupId>com.fasterxml.jackson.core</groupId>        <ar>factId>jackson-­‐core</ar>factId>        <version>2.5.1</version>      </dependency>        <dependency>        <groupId>com.fasterxml.jackson.core</groupId>        <ar>factId>jackson-­‐databind</ar>factId>        <version>2.5.1</version>      </dependency>      <!-­‐-­‐  Jackson  JSON  Mapper  -­‐-­‐>  
  • 31. Maven  2/2    <proper>es>      <spring.version>4.1.5.RELEASE</spring.version>    </proper>es>        <dependencies>      <dependency>        <groupId>org.springframework</groupId>        <ar>factId>spring-­‐core</ar>factId>        <version>${spring.version}</version>      </dependency>          <dependency>        <groupId>org.springframework</groupId>        <ar>factId>spring-­‐web</ar>factId>        <version>${spring.version}</version>      </dependency>          <dependency>        <groupId>org.springframework</groupId>        <ar>factId>spring-­‐webmvc</ar>factId>        <version>${spring.version}</version>      </dependency>    </dependencies>  
  • 32. mvc-­‐dispatcher-­‐servlet.xml   <?xml  version='1.0'  encoding='UTF-­‐8'  ?>   <beans  xmlns="h7p://www.springframework.org/schema/beans"    xmlns:xsi="h7p://www.w3.org/2001/XMLSchema-­‐instance"    xmlns:context="h7p://www.springframework.org/schema/context"    xmlns:mvc="h7p://www.springframework.org/schema/mvc"    xsi:schemaLoca;on="h7p://www.springframework.org/schema/mvc      h7p://www.springframework.org/schema/mvc/spring-­‐mvc-­‐4.1.xsd      h7p://www.springframework.org/schema/beans        h7p://www.springframework.org/schema/beans/spring-­‐beans-­‐4.1.xsd      h7p://www.springframework.org/schema/context        h7p://www.springframework.org/schema/context/spring-­‐context-­‐4.1.xsd">      <context:component-­‐scan  base-­‐package="com.vobi.demo.mvc.controller"  />    <mvc:annota;on-­‐driven  />     </beans>  
  • 33. web.xml   <web-­‐app>      <listener>      <listener-­‐class>org.springframework.web.context.ContextLoaderListener</listener-­‐class>    </listener>      <listener>      <listener-­‐class>org.springframework.web.context.request.RequestContextListener</listener-­‐class>    </listener>      <context-­‐param>      <param-­‐name>contextConfigLoca>on</param-­‐name>      <param-­‐value>classpath*:/applica>onContext.xml,classpath*:/mvc-­‐dispatcher-­‐servlet.xml</param-­‐value>    </context-­‐param>        <!-­‐-­‐  MVC  -­‐-­‐>    <servlet>      <servlet-­‐name>mvc-­‐dispatcher</servlet-­‐name>      <servlet-­‐class>org.springframework.web.servlet.DispatcherServlet</servlet-­‐class>      <load-­‐on-­‐startup>1</load-­‐on-­‐startup>    </servlet>      <servlet-­‐mapping>      <servlet-­‐name>mvc-­‐dispatcher</servlet-­‐name>      <url-­‐pajern>/controller/*</url-­‐pajern>    </servlet-­‐mapping>    <!-­‐-­‐  MVC  à   </web-­‐app>  
  • 34. Código  de  ejemplo  Servicio   @Controller   @RequestMapping("/operacionesMatema>cas")   public  class  OperacionesMatema>cas  {        @RequestMapping(value="/sumar/{numeroUno}/{numeroDos}",  method  =  RequestMethod.GET)    public  @ResponseBody  Resultado  sumar(@PathVariable  Integer  numeroUno,  @PathVariable  Integer   numeroDos,ModelMap  model)  {      Resultado  resultado=new  Resultado();      resultado.setResultado(numeroUno+numeroDos);      return  resultado;    }       }   hdp://127.0.0.1:8080/demoRestSpringMVC/controller/operacionesMatema;cas/sumar/3/4  
  • 35. Código  de  ejemplo  Cliente   @RunWith(SpringJUnit4ClassRunner.class)   @ContextConfigura;on("/applica;onContext.xml")   public  class  ClienteOperacionesMatema>cas  {      @Test    public  void  test()  {      RestTemplate  restTemplate  =  new  RestTemplate();      Resultado  resultado=restTemplate.getForObject("hdp://127.0.0.1:8080/demoRestSpringMVC/ controller/operacionesMatema;cas/sumar/3/4",Resultado.class);      assertEquals(resultado.getResultado(),  new  Integer(7));      System.out.println(resultado.getResultado());    }     }   hdp://127.0.0.1:8080/demoRestSpringMVC/controller/operacionesMatema;cas/sumar/3/4  
  • 36. WADL  de  ejemplo   <?xml  version="1.0"  encoding="UTF-­‐8"  standalone="yes"?>   <applica>on  xmlns="hjp://research.sun.com/wadl/2006/10">          <doc  xmlns:jersey="hjp://jersey.dev.java.net/"  jersey:generatedBy="Jersey:  1.0.3.1  08/14/2009  04:19  PM"/>          <resources  base="hjp://127.0.0.1:9090/demoRest/services/">                  <resource  path="operacionesMatema>cas">                          <resource  path="sumar/{numero_uno}/{numero_dos}">                                  <param  xmlns:xs="hjp://www.w3.org/2001/XMLSchema"  type="xs:int"  style="template"   name="numero_uno"/>                                  <param  xmlns:xs="hjp://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  
  • 37. Taller  desarrollo  de  servicios  Rest   S  Servicio  Operaciones  Matemá;cas   S  Sumar   S  Restar   S  Mul;plicar   S  Dividir   S  Cliente  del  servicio  Operaciones  Matema;cas  
  • 38. Taller  desarrollo  de  servicios  Rest   S  Servicio  de  En;dad  para  Cliente   S  Crear   S  Modificar   S  Borrar   S  Consultar  por  ID   S  Consultar  Todos   S  Cliente  del  servicio  Rest  
  • 40. ENLACES   S  hdp://webservices.xml.com/   S  hdps://blueprints.dev.java.net/books.html  
  • 41. 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