Rest vs. Web Services
Rest vs. Web Services
Rest vs. Web Services
vs
Web Services
Índice
¿Qué es un Servicio Web?................................................................................................ 3
¿Por qué surge el debate entre REST y los Servicios Web? .......................................... 10
¿Por qué surge el debate entre los Servicios Web basados en REST y SOAP?............. 10
Las primeras herramientas para Servicios Web estaban centradas en esta visión.
Algunos lo llaman la primera generación de Servicios Web. Esta es la razón por
la que este estilo está muy extendido. Sin embargo, ha sido algunas veces
criticado por no ser débilmente acoplado, ya que suele ser implementado por
medio del mapeo de servicios directamente a funciones específicas del lenguaje
o llamadas a métodos. Muchos especialistas creen que este estilo debe
desaparecer.
Los Servicios Web basados en SOA son soportados por la mayor parte de
desarrolladores de software y analistas. Al contrario que los Servicios Web
basados en RPC, este estilo es débilmente acoplado, lo cual es preferible ya que
se centra en el “contrato” proporcionado por el documento WSDL, más que en
los detalles de implementación subyacentes.
estándar (por ejemplo GET, PUT,…). Por tanto, este estilo se centra más en
interactuar con recursos con estado, que con mensajes y operaciones.
Cabe destacar que REST no es un estándar, ya que es tan solo un estilo de arquitectura.
Aunque REST no es un estándar, está basado en estándares:
• HTTP
• URL
Si pensamos un poco en este éxito, nos daremos cuenta que la Web ha sido la única
aplicación distribuida que ha conseguido ser escalable al tamaño de Internet. El éxito lo
debe al uso de formatos de mensaje extensibles y estándares, pero además cabe destacar
que posee un esquema de direccionamiento global (estándar y extensible a su vez).
Las URIs identifican recursos, los cuales son objetos conceptuales. La representación de
tales objetos se distribuye por medio de mensajes a través de la Web. Este sistema es
extremadamente desacoplado.
Estas características son las que han motivado para ser utilizadas como guía para la
evolución de la Web.
el estado del recurso fuera. Internamente el estado del recurso puede ser
cualquier cosa desde una base de datos relacional a un fichero de texto.
• Mensajes autodescriptivos. REST dicta que los mensajes HTTP deberían ser tan
descriptivos como sea posible. Esto hace posible que los intermediarios
interpreten los mensajes y ejecuten servicios en nombre del usuario. Uno de los
modos que HTTP logra esto es por medio del uso de varios métodos estándares,
muchos encabezamientos y un mecanismo de direccionamiento. Por ejemplo, las
cachés Web saben que por defecto el comando GET es cacheable (ya que es
side-effect-free) en cambio POST no lo es. Además saben como consultar las
cabeceras para controlar la caducidad de la información. HTTP es un protocolo
sin estado y cuando se utiliza adecuadamente, es posible es posible interpretar
cada mensaje sin ningún conocimiento de los mensajes precedentes. Por
ejemplo, en vez de logearse del modo que lo hace el protocolo FTP, HTTP envía
esta información en cada mensaje.
Los defensores de REST han creído que estas ideas son tan aplicables a los problemas
de integración de aplicaciones como los problemas de integración de hipertexto.
Fielding es bastante claro diciendo que REST no es la cura para todo. Algunas de estas
características de diseño no serán apropiadas para otras aplicaciones. Sin embargo,
aquellos que han decidido adoptar REST como un modelo de servicio Web sienten que
al menos articula una filosofía de diseño con fortaleza, debilidades y áreas de
aplicabilidad documentada.
La Web consiste del protocolo HTTP, de tipos de contenido, incluyendo HTML y otras
tecnologías tales como el Domain Name System (DNS).
Por otra parte, HTML puede incluir javascript y applets, los cuales dan soporte al code-
on-demand, y además tiene implícitamente soporte a los vínculos. HTTP posee un
interfaz uniforme para acceso a los recursos, el cual consiste de URIs, métodos, códigos
de estado, cabeceras y un contenido guiado por tipos MIME.
Los métodos HTTP más importantes son PUT, GET, POST y DELETE. Ellos suelen
ser comparados con las operaciones asociadas a la tecnología de base de datos,
operaciones CRUD: CREATE, READ, UPDATE, DELETE. Otras analogías pueden
también ser hechas como con el concepto de copiar-y-pegar (Copy&Paste). Todas las
analogías se representan en la siguiente tabla:
Las acciones (verbos) CRUD se diseñaron para operar con datos atómicos dentro del
contexto de una transacción con la base de datos. REST se diseña alrededor de
transferencias atómicas de un estado más complejo, tal que puede ser visto como la
transferencia de un documento estructurado de una aplicación a otra.
HTTP proporciona mecanismos para el control del caching y permite que ocurra una
conversación entre el navegador y la caché del mismo modo que se hace entre el
navegador y el servidor Web.
• ¿Qué son las URIs? Las cosas identificadas por URIs son “recursos”. Aunque es
más apropiado decir que los Recursos son identificados mediante URIs.
Si solo existe una única URI como punto de acceso, posiblemente se esté
creando un protocolo RPC. En tal caso, se debe desmenuzar el problema en tipos
de recursos que se quieren manipular. Dos lugares donde se debe considerar
cuando se buscan los recursos potenciales son las colecciones y las interfaces de
búsqueda. Una colección de recursos es en si mismo un recurso. Una interfaz de
búsqueda también lo es, ya que el resultado de una búsqueda es otro conjunto de
recursos.
Por tanto, hemos identificado dos tipos de recursos, por tanto habrá dos tipos de
URIs:
o Employee (Una URI por empleado).
o AllEmployee (Listado de los empleados).
Para cada uno de los recursos, se tiene que decidir cual va a ser su
representación. Si es posible, reutilizar formatos existentes, ayudará a
incrementar la oportunidad de que nuestro sistema se componga con otros.
<employee xmlns='HTTP://example.org/my-example-ns/'>
<name>Full name goes here.</name>
<title>Persons title goes here.</title>
<phone-number>Phone number goes here.</phone-number>
</employee>
<employee-list xmlns='HTTP://example.org/my-example-ns/'>
<employee-ref href="URI of the first employee"/>
Full name of the first employee goes here.</employee>
• ¿Qué métodos son soportados en cada URI? En este apartado tenemos que
definir como van a ser referenciados los recursos. Por medio de las URIs y los
métodos soportados el acceso va a ser posible. El acceso de puede hacer de
muchas formas, recibiendo una representación del recurso (GET o HEAD),
añadiendo o modificando una representación (POST o PUT) y eliminando
algunas o todas las representaciones (DELETE).
• ¿Qué códigos de estado pueden ser devueltos? No solo es necesario conocer que
tipo de representación va a ser devuelta, también es necesario enumerar los
códigos de estado HTTP típicos que podrían ser devueltos.
Por tanto, esta pregunta debería haber sido formulada como ha sido hecha en el
siguiente apartado.
El problema principal surge del propósito inicial de SOAP. Esta tecnología fue
originalmente pensada para ser una versión, sobre Internet, de DCOM o CORBA. Así lo
demuestra su predecesor, el protocolo XML-RPC. Estas tecnologías lograron un éxito
limitado antes de ser adaptadas. Esto es debido a que este tipo de tecnologías, las
basadas en modelos RPC (Remote Procedure Call) son más adecuadas para entornos
aislados, es decir, entornos donde se conoce perfectamente el entorno. La evolución en
este tipo de sistemas es sencilla, se modifica cada usuario para que cumpla con los
nuevos requisitos.
Pero cuando el número de usuarios es muy grande es necesario emplear una estrategia
diferente. Se necesita organizar frameworks que permitan evolucionar, tanto por el lado
del cliente como del servidor. Se necesita proponer un mecanismo explícito para la
interoperabilidad de lo sistemas que no poseen la misma API. Protocolos basados en
RPC no son adecuados para este tipo de sistemas, ya que cambiar su interfaz resulta
complicado.
Por esta razón, se intenta tomar como modelo a la Web. A primera vista se puede pensar
que SOAP lo hace, ya que utiliza HTTP como medio de transporte. Pero Fielding
argumenta que la Web funciona mejor cuando se utiliza en el estilo que lo hace REST.
Utilizar HTTP como medio de transporte para protocolos de aplicación a través de
firewalls es una idea equivocada. Esto reduce la efectividad de tener un firewall. Lo cual
aumenta las posibilidades de nuevos agujeros de seguridad.
Sin embargo, los partidarios de SOAP argumentan que gracias a la tecnología existente
que permite a los diseñadores encapsular la complejidad del sistema, dando lugar a
interfaces generadas automáticamente que permiten facilitar el diseño del sistema.
• Crear una URL para cada recurso. Los recursos deberían ser nombres no verbos
(acciones). Por ejemplo no utilizar esto:
http://www.service.com/entities/getEntity?id=001
http://www.service.com/entities/001
REST SOAP
Las operaciones se definen en los Las operaciones son definidas como
mensajes. puertos WSDL.
Una dirección única para cada instancia Dirección única para todas las
Características del proceso. operaciones.
Cada objeto soporta las operaciones Múltiple instancias del proceso
estándares definidas. comparten la misma operación.
Componentes débilmente acoplados. Componentes fuertemente acoplados.
Bajo consumo de recursos. Fácil (generalmente) de utilizar.
Las instancias del proceso son creadas La depuración es posible.
explícitamente. Las operaciones complejas pueden ser
El cliente no necesita información de escondidas detrás de una fachada.
Ventajas enrutamiento a partir de la URI inicial. Envolver APIs existentes es sencillo
declaradas Los clientes pueden tener una interfaz Incrementa la privacidad.
“listener” (escuchadora) genérica para Herramientas de desarrollo.
las notificaciones.
Generalmente fácil de construir y
adoptar.
Gran número de objetos. Los clientes necesitan saber las
Manejar el espacio de nombres (URIs) operaciones y su semántica antes del
puede ser engorroso. uso.
Posibles
La descripción sintáctica/semántica Los clientes necesitan puertos dedicados
desventajas muy informal (orientada al usuario). para diferentes tipos de notificaciones.
Pocas herramientas de desarrollo. Las instancias del proceso son creadas
implícitamente.
REST SOAP
“La Web es el universo de la información “La Web es el transporte universal de
accesible globalmente” (Tim Berners Lee) mensajes”
A continuación vamos a intentar esbozar las diferencias entre REST y SOAP desde
varios puntos de vista:
REST SOAP
Interacción dirigida por el usuario por medio de Flujo de eventos orquestados.
formularios.
Pocas operaciones con muchos recursos Muchas operaciones con pocos recursos.
Tecnología Mecanismo consistente de nombrado de recursos Falta de un mecanismo de nombrado.
(URI).
Se centra en la escalabilidad y rendimiento a gran Se centra en el diseño de aplicaciones
escala para sistemas distribuidos hipermedia. distribuidas.
Protocolo
Metodología
de diseño
Identificar recursos a ser expuestos como Listar las operaciones del servicio en el
servicios. documento WSDL.
Definir URLs para direccionarlos. Definir un modelo de datos para el
contenido de los mensajes.
Distinguir los recursos de solo lectura (GET) de Elegir un protocolo de transporte
los modificables (POST,PUT,DELETE). apropiado y definir las correspondientes
políticas QoS, de seguridad y
transaccional.
Implementar e implantar el servidor Web. Implementar e implantar el contenedor
del servicio Web.
• Routing (Enrutamiento): Los mensajes HTTP son enrutados del cliente a los
proxys y a los servidores. Esto es una especie de enrutamiento controlado por la
red, pero a veces es adecuado poder controlar por el cliente el enrutamiento de
los mensajes mediante la definición de una ruta entre los nodos. Los partidarios
de REST creen que esto puede ser uno de los pocos puntos en común con
SOAP, ya que el modo que SOAP utiliza el “Routing” es compatible con la
Web. Por tanto, los investigadores de REST trabajan en un modelo similar al de
SOAP.
• Modelo extensible: SOAP tiene un modelo extensible que permite al creador del
mensaje SOAP ser muy explicito sobre si comprender una porción del mensaje
es opcional u obligatorio. Esto también permite al encabezamiento ser objetivo
de algunos intermediarios. Existe una extensión de HTTP con muchas de las
mismas ideas (posiblemente la versión SOAP este basada en esta versión), pero
no es tan conocida ni está tan clara sintácticamente.
• Descripción del servicio: SOAP tiene WSDL, pero muchos alegan que HTTP no
tiene nada similar hasta la fecha. Esto no es del todo cierto, WADL (Web
Application Description Language) proporciona una simple alternativa a WSDL
para el uso con aplicaciones Web basadas en XML/HTTP. Hasta el momento
tales aplicaciones han sido descritas principalmente por medio de combinaciones
de descripciones textuales y esquemas XML. WADL pretende proporcionar una
descripción de estas aplicaciones procesable automáticamente.
Los clientes podrían preferir una interfaz basada en componente a una interfaz
REST. Así como los programadores que están más familiarizados con el uso de
APIs. Además, las APIs se integran mucho mejor en los lenguajes de
programación existentes. Para los programadores por el lado del cliente, REST
puede resultar algo novedoso, en cambio para el otro lado, no se notara mucha
diferencia con lo que se había desarrollado en los últimos años, sitios Webs.
Por tanto, las nuevas aplicaciones basadas en SOAP tendrán un gran obstáculo a superar
antes de ser implantadas y tendrán incluso mayores retos adaptando y evolucionando
una vez hayan sido implantadas.
Por otra parte, posiblemente tendrá varios años de éxito dentro de las organizaciones.
Muchos profesionales ven a SOAP como una versión estandarizada de DCOM y
CORBA, y por tanto, tendrá al menos el mismo éxito que tuvieron estas tecnologías en
la integración punto a punto de sistemas internos. Sin embargo, si una alternativa basada
en REST llega a ser dominante en Internet, será inevitable su filtración a los sistemas
corporativos internos como hizo la Web.
Todo lo visto a lo largo del documento como en el párrafo anterior, parece que nos da
pistas para el futuro éxito de REST. Aunque, todos sabemos que en el mundo de la
tecnología no siempre acaba triunfando la tecnología mejor, recuérdese el caso de VHS
vs BetaMax.
Lo que está claro es que falta una pieza en la Web. La comunicación Hombre –
Máquina parece que funciona, pero la comunicación Máquina – Máquina sigue siendo
un reto. Recientemente, se ha presentado una propuesta donde los principios de REST
han sido aplicados a los estándar y guías de diseño asociadas con la nueva versión de
SOAP, es decir, SOAP podría ser utilizado de tal manera que no violara los principios
de REST. Esto parece prometedor. Pero en mi opinión, este tipo de propuestas
(incluyendo a REST) no triunfaran si la industria no apuesta realmente por ellas
(herramientas y frameworks).
Referencias
• William Brogden, “REST versus SOAP – the REST story”,
http://searchwebservices.techtarget.com/tip/0,289483,sid26_gci1227190,00.html
• Roger L. Costello, “Building Web Services the REST Way”. xFront website.
http://www.xfront.com/REST-Web-Services.html
• Cesare Pautasso, “SOAP vs REST. Bringing the Web back into Web Services”. IBM Zurich
Research Lab. http://www.iks.inf.ethz.ch/education/ss07/ws_soa/slides/SOAPvsREST_ETH.pdf
• Paul Prescod, "Second Generation Web Services", O'Reilly's XML.com website, February 06,
2002, http://webservices.xml.com/pub/a/ws/2002/02/06/rest.html
• Paul Prescod, “REST and the real world”. O'Reilly's XML.com website,
http://www.xml.com/lpt/a/923
• Leonard Richardson and Sam Ruby, "RESTful Web Services", O'Reilly Publishers, 2007.