1 SAO220409 Servicios Web REST SAO220409
2 IntroducciónIntroducción ¿Qué es REST?¿Qué es REST? REST vs SOAPREST vs SOAP PropuestaPropuesta Demo:Demo: Twitter REST APITwitter REST API Consumo Servicios Web REST Temario
3 Introducción - ¿Qué es REST? ¿Qué es REST (REpresentational State Transfer)? NO es una especificación, ni un estándar, es un “estilo” de arquitectura, que define una serie de principios para el diseño de arquitecturas en red, tales, como la Web. NO es un estándar, pero está basado en estándares: HTTP URL Representación de Recursos: XML / HTML / GIF / JPEG Tipos MIME: text/xml, text/html, application/pdf Fielding, Roy (2000) Consumo Servicios Web REST
4 Principios REST (1) Recursos Uniformemente Accesibles (URI Única): Consultar listado de todos los clientes: http://smartflex/ccgac/customers Consultar listado de clientes por nombre “andres” y apellido “lopez”: http://smartflex/ccgac/customers?name=andres&lastname=lopez Consultar detalle del cliente “123”: http://smartflex/ccgac/customer/123 Consultar listado de todos los clientes: http://smartflex/ccgac/customers Consultar listado de clientes por nombre “andres” y apellido “lopez”: http://smartflex/ccgac/customers?name=andres&lastname=lopez Consultar detalle del cliente “123”: http://smartflex/ccgac/customer/123 Consultar listado de clientes por apellido “carlos”: http://smartflex/ccgac/customers?opcion=listado&name=carlos Consultar detalle del cliente “123”: http://smartflex/ccgac/customers?opcion=detalle&id=123 Consultar listado de clientes por apellido “carlos”: http://smartflex/ccgac/customers?opcion=listado&name=carlos Consultar detalle del cliente “123”: http://smartflex/ccgac/customers?opcion=detalle&id=123 Consumo Servicios Web REST Introducción - ¿Qué es REST? Fielding, Roy (2000)
5 Consultar cliente “13”: GET http://smartflex/ccgac/customer/13 Registrar cliente “13”: PUT http://smartflex/ccgac/customer/13 Consultar cliente “13”: GET http://smartflex/ccgac/customer/13 Registrar cliente “13”: PUT http://smartflex/ccgac/customer/13 Principios REST (2) Recursos Accedidos y Actualizados por Operaciones PUT, GET, POST y DELETE (CRUD): Consultar cliente “13”: POST http://smartflex/ccgac/getCustomer?id=13http://smartflex/ccgac/getCustomer?id=13 Eliminar cliente “13”: POST http://smartflex/ccgac/delCustomer?id=13http://smartflex/ccgac/delCustomer?id=13 Consultar cliente “13”: POST http://smartflex/ccgac/getCustomer?id=13http://smartflex/ccgac/getCustomer?id=13 Eliminar cliente “13”: POST http://smartflex/ccgac/delCustomer?id=13http://smartflex/ccgac/delCustomer?id=13 Consumo Servicios Web REST Introducción - ¿Qué es REST? Actualizar cliente “13”: POST http://smartflex/ccgac/customer/13 Eliminar cliente “13”: DELETE http://smartflex/ccgac/customer/13 Actualizar cliente “13”: POST http://smartflex/ccgac/customer/13 Eliminar cliente “13”: DELETE http://smartflex/ccgac/customer/13 Fielding, Roy (2000)
6 Principios REST (3) Uso Metadatos Descripción y Representación Recursos: Descripción: TITLE / DESCRIPTION / SUBJECT / CREATOR Representación: XML / HTML / GIF / JPEG / PDF (Tipos MIME) Formato: Language / Encoding / Charset Consumo Servicios Web REST Introducción - ¿Qué es REST? Fielding, Roy (2000)
7 ¿Qué es RESTful? Introducción - ¿Qué es RESTful? Consumo Servicios Web REST
8 Introducción - Dominios de Aplicación REST http://www.programmableweb.com Consumo Servicios Web REST Dominios de Aplicación REST e-Commerce eBay (Hasta 2008) Amazon Product Advertising Yahoo Shopping Groupon Social Networking Twitter Facebook LinkedIn Instagram Sistemas de Información Geográfica ArcGIS OpenStreetMap
9 http://www.programmableweb.com Consumo Servicios Web REST Introducción - REST vs SOAP REST vs SOAP
10 ÍtemRESTSOAP Definición Estilo de Arquitectura Arquitectura Orientado a Recursos (ROA) Protocolo Arquitectura Orientado a Servicios (SOA) Dominio de Aplicación Aplicaciones Internet dirigidas a clientes desconocidos. Aplicaciones empresariales dirigidas a integración de sistemas heterogéneos, código legado, etc. Definición de Interface Ningún estándar. Iniciativas: WADL (2006) y WSDL 2.0 (2007) WSDL (2001) Generación clientes Stubs para su depuración. Transferencia de DatosHTTPSOAP sobre HTTP / FTP / SMTS Formato de Datos Soporta diferentes formatos (XML, JSON, YAML, etc.). Solamente soporta formato XML. Requiere XML “Wrapper” EscalabilidadMayor escalabilidad.Menor escalabilidad. InteroperabilidadSolamente HTTPMuchos estándares y proveedores. Cache En solicitudes GET, permite a los Proxys realizar cache más fácilmente. Utiliza solicitudes POST, dificultando el cache de las respuestas. Complejidad HTTP nativo en todos los lenguajes. Construcción simple de solicitud HTTP. Requiere librerías cliente. Generación clientes stubs/proxies. Introducción - REST vs SOAP REST vs SOAP Consumo Servicios Web REST
11 Internet Propuesta Consumo de Servicios Web Cliente Servidor SolicitudRespuesta Servicios Web SOAP Procesos (Servicios PL/SQL) Protocolo W3C SOAP Estilo de Arquitectura REST Especificación W3C JavaScript Protocolo UserLand XML-RPC Estilos y Protocolos Consumo Servicios Web REST
12 Referenciar Servicio Web REST Propuesta URL WS-REST Datos Autenticación Proxy Servicio PL/SQL Consumir Servicio Web REST Consumo Servicios Web REST
13 Servicio PL/SQL path1, …, pathN [ Paquete PL/SQL]. Invoke ( path1, …, pathN, arg1, …, argN ) Servicio PL/SQL path1, …, pathN [ Paquete PL/SQL]. Invoke ( path1, …, pathN, arg1, …, argN ) URL WS-REST http [ s ]: // host [ : port ] [ / {path1} / … / {pathN} ] ? http [ s ]: // host [ : port ] [ / {path1} / … / {pathN} ] [ ? {arg1} & … & {argN} ] URL WS-REST http [ s ]: // host [ : port ] [ / {path1} / … / {pathN} ] ? http [ s ]: // host [ : port ] [ / {path1} / … / {pathN} ] [ ? {arg1} & … & {argN} ] Propuesta Referenciar Servicio Web REST Paquete PL/SQL Consulta de clientes por nombre y apellido: http://smartflex/ccgac/customers?{name}&{lastName} WS_GetCustomers.Invoke ( isbName, isbLastName ) Consulta de ventas Año – Mes – Día: http://smartflex/ccgac/sales/{YYYY}/{MM}/{DD} WS_GetSales.Invoke ( isbYYYY, isbMM, isbDD ) Consulta de clientes por nombre y apellido: http://smartflex/ccgac/customers?{name}&{lastName} WS_GetCustomers.Invoke ( isbName, isbLastName ) Consulta de ventas Año – Mes – Día: http://smartflex/ccgac/sales/{YYYY}/{MM}/{DD} WS_GetSales.Invoke ( isbYYYY, isbMM, isbDD ) Consumo Servicios Web REST
14 Nombre (*)Descripción (*)Tipo de Dato (*)idCódigo de ClienteNumérico nameNombre de ClienteTexto lastnameApellido de ClienteTexto typeTipo de ClienteNumérico Propuesta - Ejemplo 1: Consultar Clientes Consultar Listado de Clientes (REST) Descripción: Método: GET Parámetros: Paquete PL/SQL: WS_GetCustomers http://smartflex/ccgac/customers?{id}&{name}&{lastname}&{type} URL: WS_GetCustomers SetHeader ( isbName isbName in varchar2, isbValue isbValue in varchar2 ) GetResponseHeader ( isbName isbName in varchar2, osbValue osbValue out varchar2 ) Invoke ( inuId inuId in numeric, isbName isbName in varchar2 isbLastName isbLastName in varchar2, inuType inuType in numeric, oclResponse oclResponse out clob )WS_GetCustomers SetHeader ( isbName isbName in varchar2, isbValue isbValue in varchar2 ) GetResponseHeader ( isbName isbName in varchar2, osbValue osbValue out varchar2 ) Invoke ( inuId inuId in numeric, isbName isbName in varchar2 isbLastName isbLastName in varchar2, inuType inuType in numeric, oclResponse oclResponse out clob ) GET idnamelastnametype GET http://smartflex/ccgac/customers?id=123&name=julio&lastname=nieto&type=12 Consumo Servicios Web REST
15 Nombre (*)Descripción (*)Tipo de Dato (*)idCódigo de ClienteNumérico Propuesta - Ejemplo 2: Actualizar Cliente Actualizar Datos de Cliente (REST) Descripción: Método: POST Parámetros: Paquete PL/SQL: WS_UpdateCustomer http://smartflex/ccgac/customer/{id} URL: WS_UpdateCustomer SetHeader ( isbName isbName in varchar2, isbValue isbValue in varchar2 ) GetResponseHeader ( isbName isbName in varchar2, osbValue osbValue out varchar2 ) Invoke ( inuId inuId in numeric, iclRequest iclRequest in clob, oclResponse oclResponse out clob )WS_UpdateCustomer SetHeader ( isbName isbName in varchar2, isbValue isbValue in varchar2 ) GetResponseHeader ( isbName isbName in varchar2, osbValue osbValue out varchar2 ) Invoke ( inuId inuId in numeric, iclRequest iclRequest in clob, oclResponse oclResponse out clob ) POST 123 http://smartflex/ccgac/customer/123POST Consumo Servicios Web REST
16
17 Demo: Twitter REST API Consumo Servicios Web REST
18 Enlaces de Interes Architectural Styles and the Design of Network-based Software Architectures http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm Web Application Description Language (WADL) http://www.w3.org/Submission/wadl/ Multipurpose Internet Mail Extensions (MIME) http://www.w3.org/Protocols/rfc1341/0_Abstract.html Apigee: API Console https://apigee.com/console Referencias Consumo Servicios Web REST
19 ¿Preguntas?
20 Consumo Servicios Web SOAP