Este documento presenta una introducción a la arquitectura REST. Describe los elementos clave de REST como la identificación de recursos mediante URIs, la manipulación de recursos a través de métodos HTTP como GET, POST, PUT y DELETE, y la comunicación sin estado entre cliente y servidor. También menciona algunas tecnologías y frameworks como Ruby on Rails, .NET, y Django que soportan el desarrollo de APIs REST.
1. Integrantes: o Lizzette Betancourt o Robert Caraguay Tutor: o Ing. Luis Jumbo Fecha: o 17 / 11/ 2014 Componente: o Arquitectura de Aplicaciones OCTUBRE 2014 – FEBRERO 2015 Universidad Técnica Particular de Loja REST Representational State Transfe
2. INTRODUCCION
Los servicios web son Apis Web que son accesibles desde las Web, dentro de una red y son ejecutadas desde un sistema. Estos servicios tienen diferentes tipos de sistemas, entre ellos REST, éstos se comunican por mensajes XML que cumplen con el estándar SOAP.
La transferencia de estado representacional o Representational State Transfer (REST), es una técnica de arquitectura de software en red para sistemas distribuidos que aprovecha de las tecnologías y protocolos de las World Wide Web (www).
Cabe destacar que REST no es una especificación ni un estándar. Este es solo una técnica de arquitectura que está basada en varios estándares, algunos de ellos son:
HTTP
URL
Recursos XML
Dicho servicio web REST, posee una serie de elementos que se los detalla a continuación.
Identificación de recursos: Los recursos deben ser totalmente accesibles, es decir deben poseer una URI de identificación, que es única
Manipulación de recursos: Uso de recursos HTTP que son accedidos, para implementarlos mediante CRUD (Get, post, put delete).
Metadatos para describir nuevos recursos: Usa métodos o tecnologías estándar como HTTP, URI, XML, RDF, JSON, ETC
Comunicación sin estado: no guardas las transacciones entre el cliente y servidor.
3. HISTORIA
La tecnología REST se originó en el año 2000, gracias al tema de tesis doctoral sobre la web escrita por de Roy Fielding, desarrollada en la Universidad de California en Irvine, en conjunto con el Consorcio World Wide Web (W3C) en paralelo con HTTP 1.1.
Fielding desarrolló este tipo de arquitectura de desarrollo web, para identificar los problemas que existían en la web, y así poder comparar soluciones alternativas a estos inconvenientes y por consiguiente certificar que las extensiones de protocolo no vulnerarían las restricciones esenciales que hacen que la web sea exitosa. La World Wide Web (www) representa la mayor implementación de un sistema conforme al estilo arquitectónico REST.
Por estas razones los autores describen al término REST, como cualquier interfaz simple que se utiliza para la trasmisión de datos de un dominio específico a través del protocolo HTTP, sin requerir de capas externas como mensajería o seguimiento de sesión.
Transferencia de estado representacional, fue desarrollado para que consuma menos software del lado del cliente, es decir un navegador estándar puede acceder a cualquier aplicación y a sus recursos de datos.
4. Overview
La transferencia de estado representacional o Representational State Transfer (REST), es una técnica arquitectónica para el diseño de aplicaciones en la red. Dicho término se originó por el Doctor Roy Fielding en el año 2000, mediante su tesis doctoral Estilos Arquitecturales y el Diseño de Arquitecturas de Software basadas en Red, en el cual definió REST como un enfoque para desarrollar servicios web, y para describir los principios de redes que caracteriza la World Wide Web.
Rest fue ganando espacio en la web como una opción más simple a SOAP (Simple Object Access Protocol) y a los servicios Web basados en el lenguaje de descripción de servicios web WSDL. El impacto de rest fue demasiado grande que logró desplazar a SOAP y a interfaces basadas en WSDL, por su manera fácil de utilizar. Rest es orientado a recursos, más no a métodos.
Objetivos
Dentro de esta arquitectura se tiene varios objetivos que deben ser cumplidos.
Escalabilidad de los componentes de interacción:
Generalidad de interfaces: cualquier cliente puede interactuar con algún servidor http, sin que se haga una configuración.
Puesta en funcionamiento independiente: los servidores antiguos o viejos tienen que ser capaces de entenderse con cliente nuevo y viceversa.
Compatibilidad con componentes intermedios: permite reducir la latencia de interacción y mejorar la seguridad.
Elementos de la Arquitectura REST
Elementos de datos
Rest define varios principios arquitectónicos o características por los que se diseñan los servicios web, se clasifican en:
5. Identificación de recursos
Todo recurso es identificado de manera única como en HTTP, que es un protocolo que se basa en URIs (Uniform Resource Identifier), ésto es lo que permite identificar un recurso. Un recurso es considerado como una entidad que representa un concepto de negocio que puede ser accedido de manera pública, éste posee un estado interno que no puede ser accedido desde el exterior, a lo que se puede acceder es a las representaciones (xml, json, rdf), dicha de otra manera se puede acceder al formato de datos que contenga este estado, para la fácil transferencia entre el cliente y el servidor.
Manipulación de recursos
Todos los recursos comparten una interfaz uniforme formada por un conjunto de operaciones, éstas nos permiten manipular el estado público de un recurso. Los métodos más importantes de http son:
Get: Obtener la representación de un recurso.(read)
Post: Crear un nuevo recurso (create)
Put: Actualizar un recurso (update)
Delete: eliminar un recurso.(delete)
Éstos suelen ser confundidos con las operaciones de Base de Datos, CRUD: create, read, update, delete. Ya que se dice que rest es crud, implementado en la web.
Metadatos para describir nuevos recursos
Varios de los recursos de los que se habla, tienen diversos formatos, entre ellos,html, xml, pdf, json, rdf entre otros.
Comunicación sin estado:
Rest exige que el estado sea transformado en estado del recurso lógico o físico, y sea mantenido en el cliente. El servidor no debe guardar el estado de la comunicación que tiene con cualquiera de los clientes en cada una de sus peticiones.
A esta razón se la llama escalabilidad, ya que el número de clientes que se comunican o interactúan con el servidor estaría afectado profundamente si, se tuviera que mantener el estado del cliente.
Conector
Es un mecanismo en el que se hace posible la comunicación y coordinación entre componentes, éste no tiene que almacenar cualquier información del estado, esta comunicación puede ser en paralelo.
6. Cliente /servidor:
Es el que inicia la comunicación a través de una petición, mientras que el servidor es el que responde a dichas peticiones para dar acceso a los usuarios.
Cache:
Puede ser utilizado por un cliente para evitar que la comunicación de red, está repetida, o por un servidor para evitar la repetición del proceso que genera una respuesta
Componentes
Producen un conjunto de métodos definidos en los recursos, para así capturar el estado actual, de dicho recurso.
Estos componentes se clasifican en:
Agente usuario: usa un conector de tipo cliente, para poder iniciar la petición y ser el receptor de la misma.
Servidor: usa un conector de tipo servidor, que realiza la representación de sus recursos y debe ser el último receptor de las peticiones, en las que se solicite modificar valores de los recursos de la misma.
Gateway: es un sistema intermedio que lo proporciona la red, se lo usa para dar el mejor funcionamiento y seguridad a la transmisión de datos.
Proxy: es un sistema intermedio que el cliente lo selecciona, para cumplir con la encapsulación de la interfaz de otros servicios, y también para dar mejor funcionamiento y seguridad a la transmisión de datos.
La diferencia entre Gateway y Proxy, es que el cliente es el encargado de ver cuándo va a usar un proxy.
Restricciones de la Arquitectura Rest
Para poder llevar a cabo los objetivos antes mencionados, se debe cumplir con las siguientes restricciones. Cliente / Servidor:
Este promueve dos componente, la lógica de negocios que es parte del Servidor y la lógica de presentación a cargo del cliente; esto permite que las modificaciones se hagan de manera independiente en la capa de presentación, no puede afectar la lógica de negocio.
Sin estado (Stateless)
Estos servicios web no mantienen estado asociado a un cliente, por lo que cada petición que se realiza es independientemente de la siguiente petición.
7. Cacheable:
Es decir que cuando se realiza un a petición al servidor, el resto de peticiones pueden hacer uso de las de la cache, si lo necesitan.
Interfaz uniforme
Dicha interfaz está diseñada para tener el trabajo eficiente en cuanto a transferencias de datos de hipermedios, ya que está optimizando para la mayor parte de la Web.
Sistemas de capas.
Permiten mejorar la conducta de la escalabilidad en internet, permitiendo tener una arquitectura con componentes separados, esto para poder limitar el comportamiento de diversos componentes, ya que se puede ver o modificar el contenido de una capa, sin afectar a la otra.
Código bajo demanda
Esta restricción es opcional, ya que permite a los clientes poder descargar el y ejecutar el código fuente a manera de scripts o applets. También posee una desventaja que es que reduce la visibilidad y puede influir en la seguridad del sistema
Rest y XML Rest como está orientado a los sistemas distribuidos de hipermedia, tiene la necesidad de crear sus representaciones a partir de recursos como lo son videos, sonidos, html, etc., Para esto en sus comienzos apostó por XML, como una de las soluciones para la codificación de representaciones que pueden ser codificadas o no están estandarizadas.
XSLT con REST
XSLT es un lenguaje de estilo utilizado para transformar documentos XML en documentos XHTML o de otros documentos basados en texto. A Través la combinación de la interfaz REST con XSLT, es posible construir formas respectivamente simples para recuperar datos XML desde el servicio web y presentarlos en el navegador usando HTML.
8. Construcción de la XSLT
Existen dos pasos para inicializar los datos XML utilizando REST y XLST, el primer consiste en la construcción del archivo XLST, que prácticamente permite convertir los datos del XML en otro formato como HTML. La segunda forma consiste en la recuperación de los datos desde el servidor web y la aplicación.
Ejemplo:
<Font face = "Arial, Helvetica, sans-serif" size = "2"> Identificador Único: <xsl: value-of select = "@ uid" /> <br/> </ font>
<Font face = "Arial, Helvetica, sans-serif" size = "2"> Elemento Code: <xsl: value- of select = "@ speciesCode" /> <br/> </ font>
<Font face = "Arial, Helvetica, sans-serif" size = "2">
Taxonomía informal:
<Xsl: for-each select = "// ns: taxonomyName">
<Xsl: if test = "! Posición () = 1">
<Xsl: text> - </ xsl: text>
</ Xsl: if>
<Xsl: value-of select = "@ nombre" />
</ Xsl: for-each>
</ Font>
Representación de la salida
El procesamiento de XSLT no es más que XSLT + XML que da como resultado la salida del documento. Una vez visto como construir un XSLT, ahora se tratará de ver cómo recuperar el documento XML desde el servidor web, utilizando la interfaz basada en REST. Los parámetros ingresan en la interfaz establecida en REST, en la misma forma que está en la página web o también se puede añadir al final de la URL o al inicio de la cabecera http un POST. Una vez que los dos parámetros se rellenan, la URL a continuación, se puede enviar mediante programación o simplemente ingresando en el navegador donde se puede observar los datos.
9. Tecnología y/o Framework
Tecnología
Descripción
Ruby on Rails
Este framework ofrece el módulo Active Resource, que proporciona la infraestructura necesaria para crear de manera sencilla recursos REST, el cual está presente en las últimas versiones, desplazando a otros modelos como SOAP.
.NET
.NET permite el consumo del api de Bing Maps Servicios REST. Estos son un conjunto de servicios web REST full que permiten la recolección de recursos a través de una url y de los métodos get y post de http. Este enfoque se utiliza en tecnologías de Windows Store y Windows Presentation Foundation (WPF).
Blogsfera (blogs)
Los blogs están basados en REST, dado que implica descargar ficheros XML (en formato RSS o Atom) que contienen listas de enlaces a otros recursos.
Amazon Simple Storage Service (Amazon S3)
Ofrece su api REST a sus desarrolladores para que hagan uso de su servicio web que permite almacenar datos en la nube. Describe las diversas operaciones como: petición y respuesta estructuras relacionadas, y códigos de error.
"Seniors Canada On- line"
El gobierno de Canadá ofrece una interfaz REST, la cual proporcionar información amalgamada para los jubilados de todos los niveles de gobierno.
“La aplicación REST comparte su base de datos y aplicación de la lógica con el sitio web HTML, por lo que la parte XML es sólo una vista fina escrita en la parte superior de todo lo que, en paralelo con la vista HTML” (David Megginson, 2005).
Bloglines
Actúa como una caché de RSS, resolviendo así el problema de ancho de banda RSS. El Bloglines Web Services se puede utilizar para desarrollar notificadores más avanzados.
Yahoo Developed
Yahoo ofrece un API en REST a los desarrolladores, con la finalidad de desarrollar y optimizar sus aplicaciones (PlaceFinder, Flickr, Tumblr, etc.).
10. WCF Data Services 4.5 de Microsoft
Es un componente de .NET para crear servicios que utilizan el protocolo de datos abierto (OData), el que permite consumir datos a través de Internet o intranet, a través del uso de transferencia de estado representacional (REST). Estos datos abiertos exponen los datos como recursos que son direccionables por URI. Los cuales acceden a los datos y cambiar utilizando los verbos HTTP estándar de GET, PUT, POST y DELETE.
Restlet - java
Es un marco de la API REST web líder para Java. Su API de Java está disponible en ambos lados de cliente y servidor, en seis ediciones compatibles: Java SE, Java EE, Android, GAE, GWT y OSGi.
Django REST
Contiene un gran conjunto de herramientas de gran alcance y hace que sea flexible y fácil de con construir APIs Web. Para poder hacer uso de este framework, se requiere de lo siguiente:
Python
Django
Zend Framework
Es un Framework que ofrece capacidades de cliente y servidor. El componente del servidor posee funciones y clases que utilizan un significativo y sencillo formato XML, es decir al momentos que se accede a estos servicios a través del cliente, es posible recuperar fácilmente los datos de retorno de la llamada remota.
El servicio del servidor es Zend_Rest_Server y el del cliente Zend_Rest_Client_Response.
Slim
Este micro framework de PHP permite y ayuda a la creación rápida de aplicaciones web (RESt) simple pero poderosa. Permite desde el router asociar cierto pedido HTTP con funciones anónimas.
Bullet PHP Micro- Framework
Es un micro framework con PHP, que permite crear con facilidad api RESt y aplicaciones web, que cumplen con los requisitos especificos de http. Este es un recurso orientado a URI que viene pre-cargado con las funciones de HTTP. Maneja un segmento a la ruta de acceso a la vez, y ejecuta la devolución de llamada antes de procesar el siguiente segmento.
Limonade
Es un micro marco de PHP para la creación de aplicaciones web, de manera rápida y sencilla. Su principal objetivo es
11. ser simple, ligero y extremadamente flexible para los desarrolladores.
Limonade es sumamente fácil de aprender y utilizar, le ofrece al desarrollador todo lo que se puede usar en marco moderno REST.
Fat-Free Framework
Es de uso gratuito y ayuda a que la creación de un sitio web sea fácil, posee el mismo poder y variedad que otros herramientas y librerías como Javascript. Facilita la escritura en programas PHP, dando un mejor aspecto, resultando mucho más fácil de entender el código del programa, obteniendo muy bueno resultados.
Silex
Es un framework PHP, está construida sobre Symfony2 y Pimple e inspirado por Sinatra. Ofrece la construcción de aplicaciones web de un solo archivo simple. Pretende ser:
Conciso: exponiendo una API intuitiva y concisa.
Extensible: posee un sistema de extensión en torno a micro-servicio con la finalidad de enlazar las bibliotecas de terceros.
Comprobable: utiliza Symfony2 de HttpKernel para la petición y respuesta. Además respeta la especificación HTTP.
Phalcon
“Nuestra misión es darle una herramienta avanzada para el desarrollo de sitios web y aplicaciones sin tener que preocuparse por el rendimiento marco” (Phalcon, s.f.).
Es de código abierto para PHP 5 con extensión C, optimizado para tener un alto rendimiento. Los desarrolladores no necesitan saber C, ya que la funcionalidad se presenta como clases PHP.
Utiliza los métodos HTTP:
GETa recuperar y buscar datos
POST para agregar datos
PUT para actualizar los datos
DELETE para eliminar los datos
12. Conclusiones
Rest es una técnica arquitectónica para producir entornos web, no es una especificación o un estándar, se basa en ciertos objetivos que se los debe cumplir conjuntamente con las restricciones para que todo salga a la perfección.
La arquitectura de Transferencia de Estado Representacional (REST) es una técnica muy utilizada actualmente en el desarrollo de aplicaciones web, debido a que posee las operaciones del protocolo HTTP, es fácil de utilizar y completa.
La arquitectura por capas permite reducir el riesgo de daño al momento de modificar algún bloque, ya que afecta sólo a la capa en donde modifica
Al aplicar la restricción de Cache, se reduce el tiempo de espera de las interacciones, ya que mejoran la eficiencia y escalabilidad.
En la actualidad esta técnica (REST) para el desarrollo web, posee una gran variedad de Frameworks disponibles para poder utilizarla, los mismos que permiten que la construcción de sistemas web sea fácil, novedoso, y completo.
13. Bibliografía
Rusell, Kay (2007). Representational State Transfer (REST). Recuperado el 15/11/2014, de Computerworld. Sitio web: http://www.computerworld.com/article/2552929/networking/representational- state-transfer--rest-.html
s.a (s.f). REPRESENTATIONAL STATE TRANSFER: REST. Recuperado el 15/11/2014 desde Internet: http://bibing.us.es/proyectos/abreproy/11247/fichero/Memoria%252F8- Representational+State+Transfer+(REST).pdf
Amazon. (2006). REST API. Recuperado el 15/11/2014, de Amazon. Sitio web: http://docs.aws.amazon.com/AmazonS3/latest/API/APIRest.html
Microsoft developer Network. (s.f.). Using the REST Services with .NET. Recuperado el 15/11/2014, de Microsoft. Sitio web: http://msdn.microsoft.com/en-us/library/jj819168.aspx
Bloglines. (s.f.). Servicios Bloglines. Recuperado el 15/11/2014, de Bloglines Sitio web: http://www.bloglines.com/services/
Megginson, D. (2005). Grandes, de aplicación REST público: Mayores de Canadá en línea. Recuperado el 15/11/2014, de Quoderat. Sitio web: http://quoderat.megginson.com/2005/03/09/public-rest-application-seniors- canada-online/
Microsoft developer Network. . (s.f.). WCF Data Services 4.5. Recuperado el 15/11/2014, de Microsoft Sitio web: http://msdn.microsoft.com/en- us/library/cc668792.aspx
Wikipedia. (2014). Ruby on Rails. Recuperado el 15/11/2014, de Wikipedia Sitio web: http://es.wikipedia.org/wiki/Ruby_on_Rails
Restlet. (s.f.). The Leading Web API Platform for Java. Recuperado el 15/11/2014, de Restlet Sitio web: http://restlet.com/
Bullet. (2012). Bullet PHP Micro-Framework. Recuperado el 15/11/2014, de Bullet Sitio web: http://bulletphp.com/
Slim. (2012). Slim. Recuperado el 15/11/2014, de Slimframework Sitio web: http://www.slimframework.com/
Django. (s.f.). Django Rest Framework. Recuperado el 15/11/2014, de Django Rest. Sitio web: http://www.slimframework.com/