rest2

¿Te gustaría aprender Spring Frameworks?
Tenemos los cursos que necesitas.¡Haz clic aquí!

¿Qué Es Un Servicio Web RESTful?

La sigla REST significa REpresentational State Transfer y en mis traducciones significaríaTransferencia De Estado Representacional.

Como dije anteriormente REST es un estilo de arquitectura. Dio luz por primera vez en un consolidado de Roy Thomas Fielding en la Universidad de California para explicar un nuevo enfoque de la transferencia de recursos entre clientes y servidores a través de HTTP.

Este estilo se enfoca en el recurso como unidad fundamental de los servicios web y estandariza de forma amigable su transferencia entre aplicaciones.

Un recurso es todo aquello relacionado con datos que interesen para comunicar. Puede referirse a un registro de la base de datos como lo sería cada contacto.

De forma extendida un conjunto de recursos del mismo tipo se les llama colecciones. Por lo que al obtener un conjunto de contactos estaríamos hablando de una colección.

Formato de datos para la transferencia

Es muy común que un servicio web RESTful ofrezca distintos formatos para la comunicación de datos. Los más frecuentes son Json y XML, sin embargo pueden usarse distintas variedades como HTML, CSV, PDF, etc.

Recuerda que la cabecera Content-Type se basa en un registro estándar de tipos llamadosMIME TYPES. Simplemente son valores de texto asociados a un significado predefinido por las regulaciones de la web para usarse como la manera correcta de representar datos.

Para Json la cabecera se define con el siguiente tipo.

Content-Type: application/json

Y para XML con:

Content-Type: text/xml

Normalmente el formato se especifica en la cabecera de tipo de contenido, pero también es posible usarlo a través de parámetros en la url como se mostraba en la API de Twitter.

rest3

Operaciones de datos con los métodos HTTP

En REST cada uno de los verbos que se usan en las peticiones equivale a una acción sobre un registro o colección.

Como ya sabes, las acciones más frecuentes se representan en la sigla CRUD (create, read, update y delete). Estas cuatro operaciones básicas tienen asignados los siguientes métodos:

Método Acción Seguro Idempotente
GET Obtiene un recurso o una colección Si Si
POST Crea un nuevo recurso No No
PUT Actualiza un recurso específico No Si
DELETE Elimina un recurso específico No Si
PATCH Actualiza parcialmente un recurso especifico No No

La columna Seguro indica si el método no es propenso a la alteración de datos, donde el único que cumple esta condición es GET debido a que solo obtiene recursos sin ningún cambio. Por el otro lado, la creación, modificación y eliminación se basan en cambiar los recursos, así que son propensos a generar inconsistencias en la base de datos.

Ahora en la columna Idempotente se especifica la capacidad de un método para no repetir una misma acción. Por ejemplo, DELETE  es idempotente ya que al eliminarse un recurso no es posible volverlo a hacer.

En contraste, POST puede crear un nuevo recurso y si es llamado de nuevo, entonces creará otro, por lo que al utilizarlo sucesivamente siempre habrá un efecto.

rest1

Utilidad de las cabeceras en servicios RESTful

Recuerda que las cabeceras o headers son componentes de las peticiones y respuestas para expresar configuraciones asociadas a cada operación.

Aunque existe una gran lista de ellas con distintos propósitos, me gustaría enfocarme en la importancia de la autorización y el almacenaminento en cache.

Autorización— Recuerda que la autorización es la entrega de permisos a un usuario para que acceda a un recurso luego de comprobar la validez de sus credenciales (Autenticación).

A través de la cabecera Authorization es posible enviar las credenciales del usuario, una clave única de acceso a la API, un token de autorización, etc. Todo depende del tipo de autenticación que vayas a realizar.

Un ejemplo de esta cabecera sería el siguiente. En él ves cómo se envía una clave en la petición del cliente para que el servidor otorgue los permisos necesarios.

Authorization: QWxhZGRpbjpvcGVuIHNlc2FtZQ

Si usas Php podrás obtener el conteido de las cabeceras con getallheaders() o el método apache_response_headers(). Luego puedes extraer el contenido de la autorización con la clave ‘authorization’ y realizar una validación.

En nuestro caso usaremos la generación de una clave manual a través de los encriptados de Php para no extender el artículo. Sin embargo tú puedes elegir frameworks de manejo de autorización, el protocolo abierto de seguridad OAuth 2.0 o servicios como Stormpath.

Caching— Con las cabeceras de cache podemos mejorar el rendimiento de un servicio web RESTful cuando este recibe volúmenes grandes de peticiones.

Aunque la aplicación de este concepto no lo veremos en este artículo, puedes hacerte una idea con un ejemplo del uso de los headers.

Supón que a través de una petición GET hacia los contactos hemos obtenido una lista de 100 registros. Pasado un tiempo la aplicación Android intenta refrescar los registros obtenidos enviando de nuevo una petición GET.

El comportamiento más básico sería dejar que el servicio web envíe de nuevo los 100 registros para comparar cuáles han cambiado y así actualizar la vista.

Pero ¿y si la respuesta no ha cambiado?… ¿es posible usar la caché para optimizar el rendimiento?

Por supuesto. Si marcas el recurso o colección con su último estado y envías este dato en la cabecera Last-Modified (última fecha de actualización) o ETag (última representación hash del recurso), podrás comparar la versión actual con la anterior y determinar si es necesario realizar un proceso de actualización. Con ello evitarás cargas excesivas de trabajo.

En este caso el servidor REST podría enviar un estado 304 de “No modified” sin ningún contenido en el cuerpo que sobrecargue el ancho de banda.

¿Te gustaría aprender Spring Frameworks?
Tenemos los cursos que necesitas.¡Haz clic aquí!
About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax
()
x
Abrir chat
¿Quieres aprender a programar?
Hola 👋,
¿Te interesa información de nuestros cursos?