Upload
vortexbird
View
1.215
Download
3
Tags:
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
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
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
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
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 SoLware basadas en Redes”
S Principios arquitectónicos de soLware 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 – 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
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="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>
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 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
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>
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
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 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/
ENLACES
S hip://webservices.xml.com/ S hips://blueprints.dev.java.net/books.html
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