Las siglas que dan nombre a este estilo arquitectónico vienen de Representational State Transfer, o en español, Transferencia de estado representacional y fue propuesto en un trabajo de tesis, me refiero a la tesis doctoral de Información y ciencias de la computación (PhD) desarrollada en el año 2000 por Roy Thomas Fielding titulada "Architectural Styles and the Design of Network-based Software Architectures" en la Universidad de California, Irvine. Dicha tesis está disponible aquí por si quieras verla 😉.

Definición

REST es un estilo de arquitectura de software para realizar una comunicación cliente-servidor. Se apoya en el protocolo HTTP para la comunicación al servidor y los mensajes que se envían y reciben pueden estar en el formato de intercambio de datos JSON o también, aunque en menor medida, XML.

La uniformidad y el orden dan frutos. Foto de Ante Hamersmit en Unsplash

Principios de REST

Para que la comunicación hacia un API utilizando el estilo REST funcione, debe seguir una serie de principios, los cuales son:

  • Interfaz uniforme o Uniform interface: Este principio postula que REST está basado en recursos y estos deben ser sustantivos en plural por ejemplo: productos, estudiantes, peliculas.
  • Sin estado o Stateless: REST no tiene estados, esto quiere decir que una llamada al API es independiente de otra y no debe depender de ella, sin embargo sí se puede usar caché para reducir el tiempo de espera en consultas GET.
  • Cliente-Servidor o Client-Server: El servidor hace el procesamiento del API y expone los recursos a uno o muchos clientes, que pueden ser una aplicación de escritorio, una página web entre otros. El cliente debe ser independiente del servidor y toda comunicación a él se debe dar mediante el API.
  • Cacheable o Cacheability: Siempre que sea posible los recursos deben de ser "cacheables" ya sea en el servidor o en el lado del cliente. La respuesta del serivdor debe contener esta información sobre cuando es posible o no el uso del caché. Esto se hace para incrementar el rendimiento en el cliente y la escalabilidad en el servidor.
  • Sistema de capas o Layered system: El servicio web debe tener una arquitectura de capas, donde su evolución sea completamente transparente para el cliente

Características de un API REST

Además de los principios arriba señalados, existen otros puntos a considerar los cuales vienen a ser características para todo API que implemente el estilo REST. Entre estos podemos considerar los siguientes:

  • Operaciones específicas: Cada acción u operacion sobre un recurso está bien definido y tiene un claro propósito, no existen los endpoints "multifuncionales". Por ejemplo si un endpoint por ejemplo es para insertar nuevos productos, no debería también insertar clientes.
  • Sintaxis estandarizada: Cada recurso es accesible únicamente desde su URI.
  • HATEOAS: Proviene del acrónimo de Hypermedia As The Engine Of Application State (Hipermedia como motor del estado de la aplicación). Es un principio o restricción de diseño que tiene REST el cual establece por ejemplo la información que nos da el web api debe incluir links, por poner un ejemplo.
  • Código bajo demanda o Code on demand : Esta es una característica opcional. El servicio web comúnmente utiliza y envía recursos estáticos, sin embargo también tiene la opción de enviar código fuente el cual se va a ejecutar en el cliente, típicamente Javascript.

Más allá de REST...

Y por si te lo hayas preguntado, ¿Existen acaso otras opciones aparte de REST? La respuesta es por supuesto, aquí te lo muestro mejor con una imagen:

Estilos para crear APIs. Imagen tomada de bravedeveloper.com

Finalmente, y no menos importante, cabe aclarar un tema que es recurrente y sólo para que no te confundas como muchos. Escuchaste seguramente el término RESTful, ¿qué es?

Simple. Así como REST es el estilo de Arquitectura, RESTful es la implementación de dicha arquitectura.

Entonces por simple sentido común un API RESTful es un API que fue diseñada usando la arquitectura REST. Así de sencillo. En esta entrada que redacté también, puedes encontrar más información, espero te sirva!

Y ya sabes, si te ha gustado esta entrada considera compartirla con tu equipo de tecnología y tus amistades 🙌.

Créditos de imagen de portada: Foto de Meggyn Pomerleau en Unsplash.