RESTful Web Services

REST llega de la mano del Gran “Gurú” (si… con mayúsculas) Roy Fielding, quien además, participó activamente en otros importantes hitos de la historia de internet, es uno de los fundadores del proyecto Apache y es co-diseñador del protocolo HTTP, también ha estado muy implicado en el desarrollo de HTML.

Para entender que es REST primero tenemos que analizar algunos conceptos básicos. Resulta complejo abordar el tema sin hablar primero de RPC (Remote Procedure Call). RPC es una interfaz de aplicación (API) y permite que los programas ejecuten código en un sistema remoto. El “cliente” envía una mensaje de llamada al “servidor” y espera un mensaje de respuesta, la llamada incluye todo lo necesario para efectuar esta comunicación entre ambos de manera exitosa.

Podríamos simplificar estos conceptos en dos puntos:

  • El “cliente” envía un mensaje de llamada y espera por la respuesta.
  • En el lado del “servidor” un proceso permanece dormido a la espera de mensajes de llamada. Cuando llega una llamada, el proceso servidor extrae los parámetros del procedimiento, calcula los resultados y los devuelve en un mensaje de respuesta.

Bajo este concepto básico, aplicado en principio al software, se adaptaron para servicios web una serie de opciones (SOAP o XML-RPC por ej, que también utilizan xml para el intercambio de datos).

Luego de esta breve introducción a la “conversación” entre cliente y servidor podríamos decir que REST está comenzando a ocupar un lugar predominante en las nuevas tendencias que hoy se plantean en Internet, ¿y por que?, voy a intentar ilustrar un poco estas ideas.

Para entender los siguientes conceptos sería importante que definamos dos grandes grupos.

Web “humana”(Browser, HTTP y HTML)
HTML: presentaciones legibles
A evolucionado hacia XHTML, CCS, XML, …

Web “de datos” (API,HTTP/SOAP, XML y …)
XML: Datos estructurados
Fuerte debate entre REST y “Big” Web Services

REST es: Una Web de datos accesible desde la Web humana

Principales Características

  • Arquitectura altamente escalable
  • Es posible implementarla sobre cualquier protocolo
  • Extensamente documentada su implementación sobre HTTP.
  • Recursos Identificables (Addressability, URI)
  • Interfaz de acceso estándar
  • Comunicación sin estado (Statelessness)
  • Representación clara de los recursos
  • Hyper-media (Connectedness)
  • Múltiple soporte de formatos: (HTML, XHTML, XML, JSON, PDF,
    FLASH, FLEX, …)
  • HTTP define el tipo (MiME) se sirve el formato adecuado.
    (Habitualmente es XML.)
  • Soporte universal y simple desde cualquier lenguaje y
    plataforma.
  • Integración real para comunicación B2B
  • Adoptado casi unánimemente en la Web2.0 (Google,
    del.icio.us, Amazon, Yahoo, ….)

Veamos más en detalle algunos de estos puntos.

Recursos Identificables
Recurso: Cualquier elemento disponible en la red que quiera ser referenciado (mapas, usuarios, libros, musica, videos, documentos, …)

Cada uno de estos recursos utiliza un URI para identificarse, y es accesible mediante este URI único.

Interfaz uniforme
Permite gestionar los recursos con los métodos HTTP preexistentes:

GET (leer, copia)
HEAD (encabezado)
PUT (crear)
POST (alta)
DELETE (modificar)

Comunicación sin estado
El Servidor no mantienen una comunicación activa con cada cliente ya que el estado está explícito en las llamadas (pregunta/respuesta).

Algún ejemplo de la diferencia entre stateful y statelessness seria FTP(stateful) contra HTTP con URLs absolutas (statelessness).

La mayoría de los servicios web actuales están trabajando de esta forma (Google Maps, Amazon S3, flickr ,del.icio.us, …).

Hypermedia
Las comunicaciones son siempre a través de links, de esta forma evitamos tener que recordar comandos y la utilización de cualquier servicio se asemeja mucho a la utilización de cualquier web (ayudando a la estandarización).

Por otra parte, es muy importante resaltar que el cliente puede ser genérico, es decir, la aplicación es capaz de servir los contenidos a una gran variedad de clientes, Flash, Flex, HTML, XHTML, XML, …

Ok,¿y todo esto, para que me sirve?
Es evidente que Internet esta en un proceso de cambio constante, y que las nuevas tecnologías se presentan vertiginosamente. Posiblemente el cambio más rotundo, que se puede destacar en los últimos tiempos, es el famoso paso de Web 1 a Web 2.0, representado por la transición de una web estática, con contenidos que dependían totalmente del anunciante, a una web mucho más interactiva y humana. Blogs, redes sociales, herramientas, incluso aplicaciones, que anteriormente reinaban en los escritorios, se vieron portadas con éxito a internet, marcando esta nueva etapa que estamos viviendo en la red.

El usuario esta respondiendo a esta oferta, con una demanda voraz de contenidos que se ajusten a estos nuevos formatos, y es de vital importancia estar muy atentos a estas demandas, ya que en la capacidad de respuesta, se definirán muchos éxitos o fracasos en los próximos tiempos.

Gracias a tecnologías como REST, y su increíble capacidad de escalabilidad y sobre todo, la gran multiplicidad de formatos de salida, podremos estar acorde a las nuevas demandas de los usuarios, gestionando los contenidos desde una interfase común y con la posibilidad de “servir” a la carta, los contenidos para los clientes, en cualquiera de los sabores requeridos, Browsers (con su gran variedad de opciones), Teléfonos, PDA’s, Blackberrys, Consolas de videojuegos y una larga lista de etcéteras, que son los invitados a esta segunda ronda de Web2.0.

Muy atrás va quedando el tiempo de “Web optimizada para Internet Explorer”, llegó el momento de ajustarse a los estándares y de servir contenidos para cualquier formato.

Links relacionados:
Curriculum de Roy Fielding
REST en la Wikipedia
Ruby on rails (un framework RESTafari)

Leave a Reply »