Qué es REST

9 de Mayo de 2008 por Jordi Romero

REST (REpresentational State Transfer) es una arquitectura para aplicaciones que se comunican a través del protocolo HTTP.

Verbos HTTP

Típicamente, se conocen del protocolo HTTP dos verbos: GET y POST. GET es el que se utiliza para pedir un contenido a un servidor web. Por ejemplo: GET http://jrom.net/ nos mandará el contenido de la URL pedida. También podemos añadir parámetros usando el verbo GET: GET http://jrom.net/?s=rails, en este caso, el servidor recibe que queremos la URL http://jrom.net/ pero con la variable s=rails.

El otro verbo conocido es POST. Normalmente se utiliza en los formularios mandan datos al servidor.

Sin embargo, hay más verbos HTTP que normalmente no se usan. Para poder usar una arquitectura REST, necesitaremos usar (además de GET y POST) los verbos PUT y DELETE. Estos ni siquiera son soportados por los navegadores corrientes, por lo que hay que simular que usamos esos verbos al hacer un enlace para un navegador, aunque sí que puede usar cuándo se nos use como webservice.

REST - CRUD

REST se puede ver cómo un sistema CRUD (Crear, leer, actualizar y eliminar) proyectado al protocolo HTTP. Podemos usar un verbo HTTP por cada acción CRUD:

  • GET: Read, mostrar un objeto
  • DELETE: Delete, eliminar un objeto
  • PUT: Update, actualizar un objeto
  • POST: Create, crear un objeto
De esta forma, si queremos hacer una de las acciones CRUD sobre el objeto “proyecto” que lo identificamos por un ID=428, podríamos entender las siguientes ordenes HTTP:
  • GET http://localhost/proyectos/428 → Obtiene el proyecto 428
  • DELETE http://localhost/proyectos/428 → Elimina el proyecto 428
  • PUT http://localhost/proyectos/428 → Modifica el proyecto 428
  • POST http://localhost/proyectos → Crea un proyecto con ID 428 (no podemos pasar el ID porque esto nos lo devolverá el servidor después de crear el proyecto)

El dilema

Hasta aquí, parece que REST es una solución muy limpia para manejar recursos en aplicaciones web: obtenemos unas URL limpias y orientadas a CRUD, nos van muy bien para programar nuestra aplicación web como webservice y es muy sencillo de comprender y intuir cómo funciona una aplicación web.
El problema que tiene REST es que los navegadores corrientes no soportan los verbos DELETE y PUT. Por este motivo, mucha gente descarta plantearse usar diseños REST para aplicaciones web, ya que sólo sirven al ofrecerse como webservice, y no como aplicación de cara al usuario a través de un navegador web.

La conclusión

Se puede usar un diseño REST sólo para webservices, dónde puedes manejar sin problemas los cuatro verbos HTTP. Otra opción, la que por ejemplo eligieron los diseñadores de Ruby on Rails al implementar REST en el manejo de recursos, es simular la funcionalidad REST a través de sólo GET y POST, pudiendo aceptar llamadas PUT y DELETE cuándo el cliente lo soporte. En el caso de RAILS, añaden una variable POST llamada _method, a la que le dan valor put o delete para simular llamadas PUT y DELETE del cliente.

Enlace permanente | Trackback | No hay comentarios

Deja un comentario