Servicios Web REST

Anuncio
Tema 3.2: Servicios Web REST:
Conceptos Básicos
Índice
„
„
„
Introducción
Introducción a HTTP
Conceptos básicos de REST
„
„
„
„
„
El estilo arquitectónico REST
REST en la práctica
Características de un Servicio Web REST
Valoración y Conclusiones
Ejemplos de servicios web REST: RSS / ATOM
Introducción (1)
„
„
„
„
„
REpresentational State Transfer. Estilo arquitectónico
propuesto por Roy Fielding en 2000.
La Web es, sin duda, la aplicación distribuida más
exitosa de la historia.
REST: Estilo arquitectónico para construir
aplicaciones distribuidas inspirado en las
características de la web.
Estudiaremos el estilo arquitectónico REST en el
apartado 3.6.
REST se basa fuertemente en HTTP 1.1.
Introducción (y 2)
„
Frecuentemente REST se utiliza como sinónimo de
servicios web que, en lugar de las tecnologías SOAP,
utilizan directamente HTTP y XML.
„
„
„
„
„
No añaden nuevos protocolos ni lenguajes: utilizan
solamente HTTP 1.1 y formatos como XML para especificar
mensajes.
A veces en la práctica, sobre todo con lenguajes de
scripting, esto es más sencillo que usar compiladores de
stubs y skeletons como en SOAP.
Interoperabilidad garantizada.
Pueden utilizarse para implementar RPCs, no sólo el nuevo
estilo arquitectónico
Ejemplo: Información de películas en el tema 2.
Introducción a HTTP
„
„
„
„
„
„
„
HTTP: HyperText Transfer Protocol. Estandarizado
por el W3C y la IETF.
La versión actual es HTTP 1.1.
Protocolo cliente/servidor utilizado en la Web.
Inicialmente construido para transferir páginas HTML.
Esquema petición/respuesta.
Utiliza TCP para comunicar cliente y servidor (puerto
reservado: 80).
Desde HTTP 1.1, una conexión HTTP puede utilizarse
para varias peticiones.
Concepto clave: URL como identificador de recurso.
Peticiones HTTP (1)
„
Una petición HTTP consta de:
„
„
„
„
Una URL y un método de acceso (GET, POST, PUT,…).
Cabeceras. Metainformación de la petición.
Cuerpo del mensaje (opcional).
Métodos de acceso:
„
„
„
„
GET: Solicita una representación del recurso especificado.
No debe causar “efectos secundarios” (modificaciones en el
recurso).
POST: Envía datos para que sean procesados (e.g.
formularios) al recurso indicado. Puede crear un nuevo
recurso, modificar un recurso existente o ambas cosas.
PUT: Carga en el servidor una representación de un recurso.
DELETE: Elimina el recurso especificado.
Peticiones HTTP (2)
„
Peticiones GET, PUT, DELETE deben ser
idempotentes.
„
„
Múltiples peticiones iguales deben tener el mismo efecto que
una sola.
Las peticiones GET:
„
„
„
No tienen cuerpo del mensaje.
Pueden especificarse parámetros en la URL (consultas).
Se especifican como pares campo=valor, separados por el
carácter ‘&’.
„
„
„
http://www.bookshop.com/search?tit=Java&author=John+Smith
No deben tener efectos secundarios.
Las peticiones POST:
„
„
Normalmente los datos van en el cuerpo del mensaje.
Pueden causar efectos secundarios:
„
„
Crear un nuevo recurso
Modificar un recurso existente
Respuestas HTTP
„
Una respuesta HTTP contiene:
„
Código de Status:
„
„
„
„
„
„
„
200:
404:
500:
403:
…
OK.
Recurso no encontrado.
Error en el servidor.
Error de autorización.
Cabeceras. Metainformación de la respuesta.
Cuerpo del mensaje:
„
„
Representación del recurso invocado.
… o mensaje de error.
Cabeceras HTTP
„
„
Especifican metainformación sobre las peticiones /
respuestas.
Entre otras:
„
„
„
„
„
„
„
„
„
„
Tipo de datos esperados / devueltos como respuesta.
Codificación esperada / devuelta.
Lenguaje esperado / devuelto.
Antigüedad de la respuesta.
Control de cache (e.g. tiempo de expiración, última
modificación,…)
Credenciales de autorización.
Información para proxies.
Información para Autenticación.
Agente del usuario (e.g. navegador utilizado).
…
Características Servicios REST(1)
„
Cliente- Servidor.
„
„
Sin estado.
„
„
„
Clientes invocan directamente URLs para acceder a puntos
de acceso
Cada petición de un cliente debe contener toda la
información necesaria.
No puede beneficiarse de contexto almacenado en servidor.
Intermediarios
„
El que las peticiones sean directamente HTTP permite saber
algo sobre su semántica:
„ Petición GET no invalida documentos en cache.
„ Petición POST, PUT, DELETE invalidan.
„ En SOAP no se sabe la semántica de forma genérica.
„ Caches son un componente importante de escalabilidad.
Características Servicios Web (2)
„
Intermediarios:
Servicio-1
Cache
HTTP
Cliente
HTTP
HTTP
Servicio-2
HTTP
...
Servicio-N
Tema 3.2.1: RSS / ATOM
Introducción (1)
„
RSS / ATOM: Familias de formatos XML utilizados
habitualmente para sindicación de contenidos (“web
feeds”):
„
„
Blogs, Noticias,…
“Web feed”:
„
„
„
„
Usuario se subscribe a los “feeds” que le interesan (e.g. un
blog, un periódico on-line,…).
Puede utilizar un programa lector de “feeds” para ver todos
los nuevos contenidos, sin necesidad de ir a cada sitio web.
Para cada nuevo contenido, normalmente se muestra cierta
información básica (título, resumen,…) y un enlace a la
información completa en la fuente original.
Los principales navegadores incluyen ya un lector de feeds.
Introducción (2)
„
El nombre RSS puede referirse a varios estándares,
no siempre compatibles entre sí:
„
„
„
„
„
Inicialmente creado por Netscape, fue abandonado y
extendido de forma independiente por dos grupos.
Como consecuencia hay dos ramas de compatibilidad
en RSS:
„
„
„
„
„
Really Simple Syndication (RSS 2.0).
Rich Site Summary (RSS 0.91, RSS 1.0).
RDF Site Summary (RSS 0.9, RSS 1.0).
RSS 0.9, RSS 1.0, RSS 1.1.
RSS 0.91, RSS 0.92, RSS 2.0
Los más utilizados son RSS 1.0 y RSS 2.0.
La rama “2.0” es más simple, ya que no usa RDF.
La mayoría de lectores soportan ambas ramas.
Introducción (3)
„
„
„
„
„
ATOM surge debido a los problemas de
compatibilidad entre versiones y a algunas
limitaciones adicionales de RSS.
ATOM Syndication: Estándar de la IETF (Internet
Engineering Task Force) publicado en RFC 4287.
Los principales lectores de “feeds” también soportan
Atom.
Muchos productores de feeds soportan ambos
formatos (RSS, Atom), aunque otros sólo uno de
ellos.
Sobre todo en artículos no técnicos, es habitual
encontrar el término “RSS” referido a cualquier
formato de sindicación: tanto a RSS como a Atom.
Introducción (y 4)
„
Los servicios que proporcionan feeds ATOM / RSS
son servicios web REST (RESTful, de hecho):
„
„
„
„
„
Los contenidos se acceden a través de HTTP y se devuelven
en XML.
Las “entidades” (canales e items) se pueden representar
mediante URIs únicos (idea más fuerte en ATOM).
Es un ejemplo de integración a través de la implantación de
un vocabulario estándar en lugar de un API estándar.
Su éxito ha sido espectacular.
Es importante resaltar que es un formato dedicado
exclusivamente a representar contenidos y no
cualquier tipo de información estructurada.
„
Se usa un “esquema” fijo.
Información en RSS 2.0 (1)
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title> Información de películas en la UDC</title>
<link>http://ws.udc.es/movies</link>
<description> Este sitio ofrece información completa sobre
películas estrenadas recientemente.</description>
<language>es-ES</language>
<pubDate>Mon, 19 Mar 2007 04:00:00 GMT</pubDate>
<lastBuildDate>Mon, 19 Mar 2007 13:54:26 GMT</lastBuildDate>
<managingEditor>[email protected]</managingEditor>
<webMaster>[email protected]</webMaster>
<ttl>60</ttl>
Información en RSS 2.0 (2)
<item>
<title> La maldición del escorpión de Jade </title>
<link>http://ws.udc.es/movies/maldicion_escorpion_jade.html
</link>
<description>Comedia. 103 minutos. Estrenada el 19/10/2001
Dirigida por Woody Allen. Con Woody Allen, Helen Hunt, Dan Aykroyd,
Elzabeth Berkley, Charlize Theron. Woody Allen encarna a CW Briggs,
el rey de los investigadores de seguros de Nueva York en 1940 --o
cuanto menos eso es lo que no cesa de decirle a la nueva experta en
eficiencia de la empresa, Betty Ann Fitzgerald (Helen Hunt)--.
Briggs hace alarde de ser capaz de arruinar cualquier treta de
seguros penetrando en la mente del malhechor, pero ahora, debido a
los poderes hipnóticos del "Escorpión de Jade", es la mente de un
malhechor la que penetra en Briggs
</description>
<category>Comedy</category>
<pubDate>Mon, 19 Mar 2007 04:00:00 GMT</pubDate>
<guid>http://ws.udc.es/movies/maldicion_escorpion_jade.html
</guid>
</item>
Información en RSS 2.0 (y 3)
<item>
<title>Amelie</title>
<link> http://ws.udc.es/movies/amelie.html
</link>
<description> Comedia romántica. 120 min. Estrenada el
19/10/2001. Dirigida por Jean-Pierre Jeunet. Con Audrey Tautou,
Mathieu Kassovitz, Rufus, Yolande Moreau, Artus de Penguern,
Dominique Pinon. Amelie no es una chica como las demás. Ha visto a
su pez de colores deslizarse hacia las alcantarillas ...
</description>
<category>Comedy</category>
<category>Romantic</category>
<guid>http://ws.udc.es/movies/amelie.html</guid>
<pubDate>Mon, 19 Mar 2007 13:54:26 </pubDate>
</item>
</channel>
</rss>
Formato RSS 2.0 (1)
„
„
„
„
„
Es un documento XML.
Declaración RSS: <rss version=“2.0”>
Un único elemento channel con información acerca
del canal y sus contenidos.
Un canal puede contener cualquier número de
elementos item. Cada item representa un elemento
de información del canal (noticia, entrada en el
blog,…).
Subelementos obligatorios del canal:
„
„
„
title. El nombre del canal.
link. La URL al sitio web HTML que se corresponde con el
canal.
description. Descripción corta del canal.
Formato RSS 2.0 (2)
„
Subelementos opcionales del canal:
„
„
language. Lenguaje del canal. Valores definidos por el
W3C (http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes)
pubDate. La fecha de publicación del grueso del contenido
del canal. Por ejemplo, si un site renueva el grueso de su
contenido diariamente, este valor variará una vez al día.
„
„
„
„
„
Formato de fecha: RFC 822
lastBuildDate. La última vez que cambió el contenido
del canal.
managingEditor. E-mail del responsable de los
contenidos.
webMaster. E-mail del responsable técnico del sitio web.
ttl. Indica cuantos minutos un canal puede ser cacheado.
Formato RSS 2.0 (3)
„
Subelementos opcionales del canal (cont):
„
„
„
„
„
„
„
copyright. Información de copyright de los contenidos.
generator. Programa utilizado para generar el canal.
cloud. Mecanismo simple publish-subscribe.
image. Especifica una imagen o logo del canal.
rating. Rating PICS (http://www.w3.org/PICS/).
skipHours, skipDays. Información para agregadores
sobre qué horas y días no se actualiza contenido.
Otros: docs, textInput.
Formato RSS 2.0 (y 4)
„
Subelementos de item:
„
„
„
„
„
„
„
„
„
„
Todos son opcionales pero debe aparecer al menos uno de
los dos siguientes: title o description.
title. Título del item.
link. La URL al contenido HTML completo del item.
category. Incluye el item en una o más categorías de una
taxonomía.
pubDate. Indica cuando se publicó el item.
guid. Identificador único del item (permalink). Puede
coincidir o no con el link.
author. E-mail del autor del item.
comments. URL de página con comentarios sobre el item.
enclosure. Objeto multimedia asociado al item.
source. Feed de origen del item.
Información en ATOM (1)
<?xml version="1.0" encoding="ISO-8859-1"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Información de películas en la UDC</title>
<subtitle> Este sitio ofrece información completa sobre películas
estrenadas recientemente
</subtitle>
<link href="http://ws.udc.es/movies"/>
<updated>2006-03-19T13:54:26Z</updated>
<author>
<name>Fernando Bellas</name>
</author>
<author>
<name>Alberto Pan</name>
</author>
Información en ATOM (2)
<entry>
<title>La maldición del escorpión de Jade </title>
<link
href="http://ws.udc.es/movies/maldicion_escorpion_jade.html"/>
<id> http://ws.udc.es/movies/maldicion_escorpion_jade.html
</id>
<updated>2006-03-19T04:00:00Z</updated>
<summary>Woody Allen encarna a CW Briggs, el rey de los
investigadores de seguros de Nueva York en 1940 --o cuanto menos eso
es lo que no cesa de decirle a la nueva experta en eficiencia de la
empresa, Betty Ann Fitzgerald (Helen Hunt)--. Briggs hace alarde de
ser capaz de arruinar cualquier treta de seguros penetrando en la
mente del malhechor, pero ahora, debido a los poderes hipnoticos del
"Escorpion de Jade", es la mente de un malhechor la que penetra en
Briggs
</summary>
<content>Comedia. 103 minutos. Estrenada el 19/10/2001
Dirigida por Woody Allen. Con Woody Allen, Helen Hunt, Dan Aykroyd,
Elzabeth Berkley, Charlize Theron. Woody Allen encarna a CW Briggs,
el rey de los investigadores de seguros de Nueva York en 1940 --o
cuanto menos eso es lo que no cesa de decirle a la nueva experta en
eficiencia de la empresa, Betty Ann Fitzgerald (Helen Hunt)--.
Briggs hace alarde de ser capaz de arruinar cualquier treta de
seguros penetrando en la mente del malhechor, pero ahora, debido a
los poderes hipnoticos del "Escorpion de Jade", es la mente de un
malhechor la que penetra en Briggs
</content>
<category> Comedia </category>
</entry>
Información en ATOM (y 3)
<entry>
<title>Amelie</title>
<link href="http://ws.udc.es/movies/amelie.html"/>
<id> http://ws.udc.es/movies/amelie.html </id>
<updated>2006-03-19T13:54:26Z</updated>
<summary>Amelie no es una chica como las demás. Ha visto a su
pez de colores deslizarse hacia las alcantarillas ...
</summary>
<content>Comedia romántica. 120 min. Estrenada el 19/10/2001.
Dirigida por Jean-Pierre Jeunet. Con Audrey Tautou, Mathieu
Kassovitz, Rufus, Yolande Moreau, Artus de Penguern, Dominique
Pinon. Amelie no es una chica como las demás. Ha visto a su pez de
colores deslizarse hacia las alcantarillas ...
</content>
<category> Comedia </category>
<category> Romántica </category>
</entry>
</feed>
Formato Documentos Atom (1)
„
„
Más complejo que RSS. No haremos una descripción
exhaustiva.
Es un documento XML. Utiliza el espacio de nombres
http://www.w3.org/2005/Atom
„
„
„
El elemento feed es similar al channel RSS.
El elemento entry es similar al item RSS.
Subelementos obligatorios de feed:
„
„
„
title. Nombre del canal.
author. Autor (pueden ser varios). Puede especificar el
nombre y el e-mail. Si todos los entry tienen su propio
author, no es necesario.
updated. Fecha última modificación (formato RFC 3339).
Formato Documentos Atom (2)
„
Otros subelementos:
„
„
„
subtitle. Breve descripción.
rights, category, generator, icon, logo, id,
contributor...
Subelementos de entry:
„
id. Identificador único de la entrada. Debe seguir el formato
IRI (Internationalized Resource Identifier: RFC 3987)
„
„
„
„
„
„
Las IRIs “internacionalizan” las URIs permitiendo más
caracteres..
Toda URI es una IRI.
title. Título de la entrada.
updated. Fecha de última modificación de la entrada.
author. Autor de la entrada. Puede especificar nombre y email. Si se especifica en el feed no es necesario.
summary. Resumen textual del contenido de la entrada.
Formato Documentos Atom (y 3)
„
Subelementos opcionales de entry:
„
„
„
content. Contenido completo de la entrada. No tiene
porque ser textual, sino que puede especificar
explícitamente su tipo (puede ser HTML, XHTML o binario).
Puede especificarse el lenguaje.
category. Categorías a las que se asocia la entrada.
source, published,…
ATOM vs RSS
„
RSS no especifica explícitamente el tipo de contenido mientras
que ATOM sí.
„
„
„
„
„
„
„
„
„
RSS normalmente lleva texto o HTML, pero es necesario aplicar
heurísticas para detectarlo.
En ATOM puede ser también XHTML o binario.
ATOM separa el resumen del contenido completo.
ATOM utiliza mecanismos estándar XML para manejar distintos
lenguajes.
ATOM utiliza un formato de fechas diferente.
ATOM utiliza IRIs.
En ATOM es obligatorio que cada entrada tenga un identificador
único.
ATOM soporta firma digital utilizando el estándar W3C llamado
XML Digital Signature.
ATOM tiene un esquema XML.
Generación y Parsing RSS /ATOM
„
„
Tanto RSS como ATOM pueden ser generados
fácilmente desde cualquier aplicación web.
Cualquier parser XML puede ser utilizado para
deserializar estos formatos en objetos.
„
„
Existen algunos parsers específicos para los
principales lenguajes. En JAVA:
„
„
„
E.g. JDOM.
ROME (http://wiki.java.net/bin/view/Javawsxml/Rome).
EDDIE (http://www.davidpashley.com/projects/eddie.html).
Soportan la generación y parsing de los principales
formatos e incluso la traducción desde un formato a
otro.
XSLT (1)
„
„
„
XSLT (eXtensible Stylesheet Language
Transformations) es un lenguaje para convertir un
documento XML en otro sin modificar el original.
Estándar W3C (http://www.w3.org/TR/xslt)
Puede ser utilizado para generar HTML partiendo de
XML.
„
„
La idea básica es asociar un markup a cada elemento del
XML. Según se va parseando el XML, se va generando el
HTML asociado.
Ejemplo:
„
Una aplicación podría recuperar directamente los datos de
las películas en XML o RSS y aplicar directamente una
transformación XSLT para generar un documento HTML que
mostrar al usuario.
XSLT: Ejemplo (de Wikipedia)
1) XML original
2) Transformación XSLT
<?xml version="1.0" ?>
<persons>
<person username="JS1">
<name>John</name>
<fam_name>Smith</fam_name>
</person>
<person username="MI1">
<name>Nancy</name>
<fam_name>Davolio</fam_name>
</person>
</persons>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform
" version="1.0">
<xsl:template match="/persons">
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <title>xsl wiki ex.</title> </head>
<body>
<h1>Persons</h1>
<ul>
<xsl:apply-templates select="person">
<xsl:sort select="fam_name" />
</xsl:apply-templates>
</ul>
</body>
</html>
</xsl:template>
3) XHTML obtenido
<?xml version="1.0" encoding="UTF-8"?>
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>xsl wiki ex.</title>
</head>
<body>
<h1>Persons</h1>
<ul>
<li>Davolio, Nancy</li>
<li>Smith, John</li>
</ul>
</body>
</html>
<xsl:template match="person">
<li>
<xsl:value-of select="fam_name"/>,
<xsl:value-of select="name"/>
</li>
</xsl:template>
</xsl:stylesheet>
Descargar