RESTful (REpresentational State Transfer)

La Transferencia de Estado Representacional o REST, termino publicado por de Roy Fielding (uno de los principales autores de la especificación del protocolo HTTP) en el año 2000, el termino por si solo no define una arquitectura, sino una serie de reglas o restricciones que, cuando son aplicadas al diseño de un sistema, este crea un estilo de arquitectura. Despues de evaluar todos los recursos en la red y tecnologias disponibles para crear sistemas distribuidos y viendo que sin alguna restriccion, era dificil el mantenimiento y desarrollo de aplicaciones; Fielding definio una serie de restricciones definiendo el sistema RESTful:

  • Debe ser un sistema cliente-servidor
  • Debe ser stateless, es decir, cada peticion debe ser independiente de las otras.
  • Tiene que soportar un sistema de caching.
  • Debe ser accesible uniformemente, cada recurso debe tener una unica direccion y un punto de acceso valido.
  • Debe estar diseñado en capas para soportar escabilidad.
  • Debe proveer codigo bajo demanda, esta es una restriccion opcional.

Estas restricciones no dictan que tipo de tecnologia usar, solo definen como los datos son transferidos entre componentes y sus beneficios. Actualmente contamos con un ejemplo claro de un sistema RESTful funcionando, la Web. Antes que nada debemos puntualizar que significa que la Web sea RESTful, mas particularmente la web estatica, dicha web se apega a las restricciones de RESTful, su infraestructura web actual ofrece sistemas de cacheo, conexion stateless, y unicos hyperlinks para obtener recursos, donde los recursos son todos los documentos disponibles en cada sitio, siendo sus representaciones legibles por el explorador; por lo tanto la web estatica esta construida sobre la arquitectura de REST.

Por otra parte las aplicaciones web dinamicas no siempre son RESTful, porque pueden no cumplir con alguna restriccion.

Para conocer mas acerca de la arquitectura de RESTful necesitamos comprender que son los recursos y sus representaciones, definiendo un recurso como cualquier cosa direccionable sobre la web, entendiendo por direccionable, como aquellos recursos que pueden ser accedidos y trasferidos entre cliente y servidor. Siendo el mapeo de un recurso unico, diferentes peticiones sobre el mismo pueden regresar la misma representacion binaria guardada en el servidor. Por otra parte, la representacion de un recurso, es el estado temporal de la informacion actual que es enviado de vuelta hacia los clientes, por lo tanto una representacion puede tomar varias formas, como una imagen, un archivo de texto, o un stream de XML o JSON, pero todos deben estar disponibles bajo la misma URI.