Conceptos básicos REST

+ [URI](#uri)

Aunque Roy Fielding acuñó el término REST en su tesis doctoral en el año 2000 es hasta ahora que esta arquitectura se ha popularizado. La sigla REST significa:

REST = Representational State Transfer

REST es un estilo arquitectural para sistemas distribuidos hipermedia, otra forma de decirlo, la arquitectura de la web vista como un gran sistema distribuido hipermedia. La característica principal de este estilo arquitectural es que existe una interface uniforme entre los componentes del sistema.

Recursos

Los componentes que conforman el sistema (la web) se llaman recursos. Cada recurso tiene una manera única de identificarlo (su URI), tiene una o más representaciones y le pertenece a alguien. Los recursos pueden ser una página web, un video, un sonido, una animación, un objeto json, un xml, etc.

URI

Cada uno de estos recursos tiene una forma única y uniforme de identificarlo: Su "Uniform Resource Identifiers" (URIs). La Sintaxis genérica de un URI sigue la siguiente forma:

scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]

Ejemplos de esto son:

http://www.yourserver.com/logo.gif En este caso:

  • http es el schema que requiere los //
  • www.yourserver.com es el host
  • logo.gif es el path

https://www.google.com/search?q=uri

En este caso:

  • http es el schema que requiere los //
  • www.google.com es el host
  • search es el path
  • q=uri es el query

Cuando la URI contiene la información para localizar en la red el recurso, esto es, el protocolo (http://, ftp://, ...) y el host y puerto, esta se convierte en una URL.

Operaciones sobre los recursos

En esta arquitectura, sin importar cual sea el recurso, las operaciones que se pueden hacer sobre ellos son siempre las mismas. Básicamente estas son: Obtenerlo (GET), crearlo (POST), borrarlo (DELETE), actualizarlo (PUT).

El protocolo HTTP es una forma de implementar la arquitectura REST. HTTP es un protocolo donde el cliente, típicamente un navegador, con la información provista en una URL sabe cómo localizar un recurso y traerlo. Además:

  • Define una sintaxis y la semántica que utilizan los elementos de software de la arquitectura web (clientes, servidores, proxies) para comunicarse.
  • Es un protocolo sin estado, es decir, que no guarda ninguna información sobre conexiones anteriores.
  • Define los verbos que indican la acción que desea que se efectúe sobre el recurso identificado. Los más importantes son GET, POST, PUT, DELETE que leen, crean, modifican o borran un recurso.
Con la arquitectura REST lo que se pretende es que cualquier aplicación, o mejor, los servicios que ofrece una aplicación, ya sea a través de un browser o para ser utilizados por otra aplicación, pueden ser definidos en términos de recursos y de las operaciones provistas por el protocolo HTTP.

Rest puede definirse entonces como un conjunto de convenciones para utilizar HTTP de tal forma que la aplicación que implementa un API, siguiendo estas convenciones (Resful), logrará que otros utilicen sus servicios de una manera fácil y uniforme. Estas aplicaciones son llamadas Restful. Es importante notar que las operaciones no tienen estado: no guardan información entre ellas. Significa que todo lo que se necesite para manejar una petición debe estar contenido dentro de la petición en sí misma.

Adicionalmente, los recursos son más que páginas, imágenes o videos, también representan información que maneja la aplicación, por ejemplo: los empleados de una compañía, los estudiantes de una universidad. Para representar estos recursos existen varios formatos como por ejemplo: XML o JSON, siendo JSON el más popular. Por ejemplo, si quisiéramos representar un recurso empleado, en alguna aplicación por ejemplo de una nómina de una compañía, utilizando JSON podemos definir:

Un recurso empleado:

{"nombre":"Juan", "apellido":"Perez"}

Un recurso conjunto de empleados:

{"empleados":[ {"nombre":"Juan", "apellido":"Perez"}, {"nombre":"Ana", "apellido":"Gutierrez"}, {"nombre":"Pedro", "apellido":"Ruiz"} ]}

El mismo ejemplo en formato xml sería:

<empleados> <empleado> <nombre>Juan</nombre> <apellido>Perez</apellido> </empleado> <empleado> <nombre>Ana</nombre> <apellido>Gutierrez</apellido> </empleado> <empleado> <nombre>Pedro</nombre> <apellido>Ruiz</apellido> </empleado> </empleados>

Siguiente Diseño API REST

results matching ""

    No results matching ""