El tutor de nuestro curso online de Desarrollo de Aplicaciones para Android, Víctor Ramírez Las,…
Servicios Web: arquitectura REST
En esta nueva serie de publicaciones expondremos los principales estándares para el desarrollo de servicios web, centrándonos principalmente en la arquitectura REST de la que veremos un ejemplo práctico con el desarrollo de servicio web RESTful y un cliente para conectar desde la plataforma Android.
Estándares de Servicio Web
Cada día es más habitual el uso de servicios web. Nos facilitan el intercambio de datos entre aplicaciones implementando un conjunto de protocolos y estándares que normalizan esta comunicación. Este tipo de tecnología permitirá por tanto que software realizado en diferentes lenguajes de programación, y funcionando en distintas plataformas, puedan intercambiar datos y hacer uso de ellos, usando estándares de interoperabilidad.
Vamos a presentar muy brevemente los principales estándares para la creación y consumo de servicios web , entrando luego más en profundidad en la arquitectura REST, con la que trabajaremos en nuestro proyecto ejemplo en un próximo tutorial.
SOAP
Siglas que corresponden a Simple Object Access Protocol. Se define como un protocolo estándar, que posibilita que dos objetos en diferentes procesos pueden comunicarse mediante mensajes codificados en XML y transportados por un protocolo de transporte. No define un medio de transporte de los mensajes, pero puede asociarse a protocolos existentes como HTTP (Hypertext Transfer Protocol), FTP (File Transfer Protocol), o SMTP (Simple Mail Transfer Protocol).
XML
El eXtensible Markup Language, es un meta-lenguaje (lenguaje usado para describir a otros lenguajes) que nos permite definir lenguajes de marcado adaptados o enfocados a usos concretos. Los archivos de este tipo tendrán una extensión .xml y un tipo de MIME (estándar para el intercambio de todo tipo de archivos a través de internet) application/xml, text/xml.
WSDL
Web Services Description Language. Se trata de un formato XML para describir servicios web. Se basa en XML y se centra en describir los requisitos del protocolo y los formatos de los mensajes necesarios para interactuar con los servicios listados en su catálogo.
(definición de WSDL en Wikipedia)
JSON
El JavaScript Object Notation, es un formato ligero utilizado para el intercambio de datos, y se trata de un subconjunto de la notación literal de objetos de JavaScript que no requiere el uso del formato XML. Los archivos de este tipo tendrán una extensión .json y un tipo de MIME application/json..
(definición de JSON en Wikipedia)
REST
Acrónimo de REpresentational State Transfer, es un estilo de arquitectura software que define un conjunto de principios, por los cuales se diseñan servicios web haciendo foco en los recursos del sistema, además de cómo se acceden a dichos recursos y cómo se transfieren por el protocolo de transporte HTTP hacia clientes escritos en diversos lenguajes.
Principios de la arquitectura REST
En el siguiente apartado, se describirán los principios que define la arquitectura REST, y que permiten abstraer los elementos de dicha arquitectura dentro de un sistema hypermedia distribuido.
Principios en los que se basa la arquitectura REST:
Métodos HTTP de forma explícita
Es una de las principales características de un servicio web REST, ya que proporciona una serie de métodos que permiten a la aplicación cliente realizar operaciones sobre determinados recursos del servidor web:
- GET: Obtiene un recurso del servidor.
- PUT: Actualiza o cambia el estado de un recurso del servidor.
- POST: Creación de un recurso en el servidor.
- DELETE: Elimina un recurso del servidor.
- HEAD: Comprueba si cambia el contenido en un servidor.
Arquitectura cliente/servidor que no mantiene el estado (comunicaciones sin estado)
Al tratarse de una tecnología en constante crecimiento, se debe controlar la escalabilidad del servidor web para satisfacer el número de peticiones. Debido a esta premisa, el servidor no guarda el estado (stateless) o contexto de ninguna petición previa del cliente al servidor, por lo que toda petición para el acceso a los recursos del mismo deberá incluir los parámetros y datos necesarios para procesar y devolver la respuesta.
Uso de URIs a modo de directorios
Permite definir un sistema de sintaxis universal, que posibilite la identificación de cada recurso de manera individual mediante su URI o identificador único (Uniform Resource Identifier) asociado.
Toda URI deberá regirse por algunas de las siguientes reglas básicas:
- Una URI no debe implicar acciones, por lo tanto deben evitarse el uso de verbos.
- Cada URI debe identificar de manera única a cada recurso.
- Independencia de formato.
- Mantener una jerarquía lógica.
Uso de los formatos XML y JSON para la transferencia de datos
Partiendo de la base de que toda comunicación en internet se mueve a través de recursos, y que estarán representados en un determinado formato, este principio posibilita el uso del servidor web desde diferentes clientes, escritos en distintos lenguajes de programación, y funcionando en diferentes plataformas.
Un buen ejemplo de arquitectura REST es la Web (la World Wide Web para ser exactos), siendo las páginas web los recursos, cada una con una URL que sería su identificación única (URI) y donde utilizamos el protocolo HTTP para acceder a esos recursos.
Si quieres ampliar información, puedes consultar por ejemplo la Wikipedia o este interesante artículo de introducción a REST en un estilo más informal y muy claro.
Características de un servicio web REST
Separación del recurso y la representación
Los recursos no disponen de estado, son solo un conjunto de datos que puede tener diferentes representaciones. Es el cliente el que debe indicar el tipo de representación para el recurso solicitado en la petición HTTP, para que así el servidor maneje la representación y devuelva la petición HTTP apropiada.
Escalabilidad (número de peticiones que soporta) y rendimiento (tiempo en responder a una petición)
Un aumento de la demanda, se traducirá en aumento del número de servidores, que al no guardar el estado de las peticiones de los clientes, podrán sincronizarse entre ellos sin problemas.
Seguridad
Métodos HTTP no modifican el estado y su respuesta será siempre la misma, independiente del número de veces que sea solicitado el servicio (idempotentes).
Visibilidad
Diseñado para ser visible y simple, es decir, cada aspecto del servicio debe ser autodescriptivo a través del lenguaje natural HTTP.
Nota: al hablar de REST y RESTful, hacemos mención de conceptos muy relacionados, ya que cuando nos referimos a REST nos ocupamos de los principios de arquitectura software que se han descrito anteriormente, y cuando lo hacemos de RESTful, nos referimos a los servicios web que se basan en esos principios (representan la arquitectura REST).
En el siguiente tutorial trataremos la creación de un servicio web utilizando la API JAX-RS de la versión Java SE.
Créditos: iconos utilizados en la imagen de Servicios Web provienen de Icons land