miércoles, 20 de enero de 2016

Servicios REST

Los Servicios Web se han definido como sistemas software diseñados para soportar interoperabilidad maquina a maquina sobre una red. 

Los Servicios Web suelen ser APIs Web que pueden ser accedidas dentro de una red (principalmente Internet) y son ejecutados en el sistema que los aloja. La definición de Servicios Web propuesta alberga muchos tipos diferentes de sistemas, pero el caso común de uso de refiere a clientes y servidores que se comunican mediante mensajes XML que siguen el estándar SOAP. En los últimos años se ha popularizado un estilo de arquitectura Software conocido como REST (Representational State Transfer). Este nuevo estilo ha supuesto una nueva opción de estilo de uso de los Servicios Web.

NOTA  API o, Interfaz de programación de aplicaciones es el conjunto de funciones y procedimientos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. Las API son un conjunto de comandos, funciones y protocolos informáticos que permiten crear programas específicos para ciertos sistemas operativos. Las API simplifican el trabajo del programador, ya que no se tiene que "escribir" código desde cero, usando funciones predefinidas para interactuar con el sistema operativo o con otro programa.

 REST deriva de "REpresentational State Transfer", un servicio REST no tiene estado, es decir que, entre llamadas el servicio pierde todos sus datos. Si por ejemplo usamos usuario y contraseña, estos datos se pierden entre cada llamada. El estado lo mantiene el cliente y es el cliente quien debe pasar el estado en cada solicitud. 

Si desea mantener el estado de un servicio REST, se deben pasar los datos en cada llamada. Eso puede ser un usuario y una contraseña, un token o cualquier otro dato.

La ventaja es la escalabilidad. Para mantener un estado se requiere algún tipo de almacenamiento que guarda los estados de los clientes y es posible llegar a la falta de memoria. Los datos de la sesión se mantienen entre peticiones y son por cada usuario.
Generalmente la sesión se almacena en la memoria RAM del servidor, y existe el riesgo de quedarse sin memoria. Intentar mover la sesión es ineficiente, afecta el balanceo de carga y tiene como consecuencia menor escalabilidad y tolerancia a fallos. Una solución sería guardar la sesión en base de datos, pero afecta el rendimiento. Para aplicaciones web altamente escalables es preferible no usar la sesión.

Hay otros factores que definen a un servicio REST entre ellos el “uniform interface” y es lo que diferencia un servicio web clásico (orientado a RPC) de un servicio REST.
En los últimos años se ha popularizado un estilo de arquitectura Software conocido como REST (Representational State Transfer). Este nuevo estilo ha supuesto una nueva opción de estilo de uso de los Servicios Web. A continuación se listan los tres estilos de usos más comunes:  
Remote Procedure Calls (RPC, Llamadas a Procedimientos Remotos): Los Servicios Web basados en RPC presentan una interfaz de llamada a procedimientos y funciones distribuidas. La unidad básica de este tipo de servicios es la operación WSDL (WSDL es un descriptor del Servicio Web, es decir, el homologo del IDL para COM). Las primeras herramientas para Servicios Web estaban centradas en esta visión y se considera la primera generación de Servicios Web de ahí que este estilo está muy extendido. Se considera débilmente acoplado, por ser implementado por medio del mapeo de servicios directamente a funciones específicas del lenguaje o llamadas a métodos.
Arquitectura Orientada a Servicios (Service-oriented Architecture, SOA). En la arquitectura SOA, la unidad básica de comunicación es el mensaje, más que la operación y se conoce como servicios orientados a mensajes. este estilo es débilmente acoplado,  ya que se centra en el “contrato” proporcionado por el documento WSDL.
 SOAP y REST
SOAP , “Simple Object Access Protocol” y es la base de los servicios web. SOAP es un protocolo complejo para solucionar las necesidades de comunicaciones, que incluye aspectos de seguridad, transaccionalidad, mensajería asegurada, etc.  Al final, los servicios web SOAP terminaron siendo siendo muy complejos. REST es simple no pretende solucionar todo y su complejidad es baja.

Interfaz uniforme (Uniform interface)

Un servicio web clásico (SOAP) está orientado a RPC, invocando métodos; un servicio REST está orientado a recursos, operando sobre recursos, no sobre servicios. En una API REST tenemos recursos, accesibles por identificadores (URIs). Sobre esos recursos podemos realizar acciones, a través de verbos HTTP.

Un servicio web clásico (SOAP) tendríamos un servicio "Libreria" que llamadas a métodos como LibrosDeCiencia(), LibroPorAutor(), LibrosPorEditorial(), etc. por eso su nombre, servicios  orientados a RPC (Remote Procedure Call).
Un servicio RES, a partir de de una o más URI obtiene el recuso, como la colección de libros por autor, o los libros de ciencia, etc. Es el concepto que maneja el modelo MVC, la dirección de la URL dirige hacia los "recursos" o su representación. Por ejemplo, .../Libreria/LibrosDeCiencia.

Con SOAP: para dar de alta un libro se llama al procedimiento "AgregaLibro" del servicio "Libreria" y pasamos el nombre del libro. Con una API REST usamos una URI del libro y (por ejemplo. /Libreria/CienAñosDeSoledad ) usando POST o PUT como verbo HTTP y colocando los datos del libro en la la petición. La URI para el libro "CienAñosDeSoledad" es siempre /Libreria/CienAñosDeSoledad y el verbo HTTP (GET, POST, PUT, DELETE,...) indica la operación a realizar.

Referencias:
Que es REST: http://www.desarrolloweb.com/articulos/que-es-rest-caracteristicas-sistemas.html
REST vs Web Services: http://users.dsic.upv.es/~rnavarro/NewWeb/docs/RestVsWebServices.pdf