¡Esta es una revisión vieja del documento!
La arquitectura REST (Representational State Transfer) es un estilo de distribución de datos mediante la web aprovechando el protocolo HTTP (métodos, URIs, Media Types, codigos de respuesta y petición…). Básicamente consiste en clientes que realizan peticiones a servidores, estos las procesan y retornan la respuesta adecuada.
Tanto las peticiones como las respuestas intentan “representar recursos” (de ahí su nombre), entendiendo un recurso como “contenido” que puede ser accedido a partir de una dirección.
En cualquier momento la aplicación cliente entrará en una transición de “estados de aplicación” (transición entre las distintas acciones que realiza una aplicación), se dice que si la aplicación entra en un estado “de descanso” (at rest) el usuario podrá interactuar con ella pero esta no cargará ni consumirá datos. La aplicación cliente enviará peticiones cuando esté preparada para una nueva transición.
Un servicio REST asegura rendimiento, escalabilidad, simplicidad, modificabilidad, visibilidad portabilidad y confiabilidad.
Las reglas a seguir en una arquitectura de estilo REST son las siguientes, si se siguen todas (excepto 'código on demand') el servicio podrá ser denominado RESTful:
De forma distinta a los web services basados en SOAP no existe un standard oficial (a parte de las reglas ya nombradas) para que un servicio sea RESTful, esto es porque REST es una arquitectura y SOAP un protocolo. Se definen tres aspectos para un servicio REST común:
http://example.com/resources/Ejemplo:
| URI | Método GET | Método PUT | Método POST | Método DELETE |
|---|---|---|---|---|
| http://example.com/resources/ | Lista todos los miembros. | Reemplaza la lista de miembros por otra. | Añade un miembro a la lista. | Elimina la colección. |
| http://example.com/resources/142 | Recoge el elemento con id 142. | Actualiza el elemento con id 142. | Elimina el elemento con id 142. |
Mientras que en otro tipo de web services se pone énfasis en los verbos (getUser(data), updateUser(data)…) en REST se pone énfasis en los nombres (User {data}). Un recurso tendría su propio identificador, como por ejemplo http://www.example.org/locations/us/ny/new_york_city donde, si se accede a partir del método GET, podrían haber los datos de la ciudad de New York, además puede ser sencillamente cacheado, copiado y guardado como marcador.
El protocolo HTTP es un protocolo cliente-servidor que se implementa a nivel de aplicación y define operaciones sobre los recursos del servidor (como GET, POST, PUT y DELETE), esto evita al desarrollador que lo utilice incorrectamente (es decir que siga la regla de Interface Uniforme) tener que inventar nuevos métodos (como getClients o updateStops).