En este capítulo vamos a ver una introducción a lo que son las API REST. En capítulos anteriores hemos estado manejando como acceder a datos que están expuestos en Internet en una base de datos, en un servicio… dinámicamente y asíncronamente con la técnica de Ajax.
El concepto de API REST se vuelve muy importante porque de hecho es el paradigma o manera en como se trabajan en la actualidad tanto las aplicaciones web como las aplicaciones nativas.
Así como en la primera década del siglo XXI el modelo de arquitectura MVC fue muy popular, en la actualidad el esquema está basado en la arquitectura denominada API REST.
Qué es una API REST
En los capítulos dedicados al DOM comentamos lo que son las APIs, y decíamos que significaba Application Programming Interface (Interface de programación de aplicaciones) no es mas que un conjunto de rutinas que nos provee acceso a ciertas funcionalidades de un software específico, como eran las APIs para la manipulación del HTML vía Javascript como es la API del DOM, pero no sólo tenemos eso, tenemos infinitas APIs como la de la geolocalización, el acceso a la webcam…
APIs nativas y APIs externas
Dentro del mundo de las APIs tenemos APIs nativas y APIs externas, las primeras son aquellas en las cuales todo el motor de Javascript trae integrado para acceder al DOM, a la webcam, a la batería, los puertos USB, los estados de conexión, la geolocalización.
Y también podemos tener APIs externas, como por ejm acceder a datos externos mediante la API de GitHub, el API de Facebook, el API de Twitter para obtener los datos de un usuario, WordPress, desde hace algunos años tiene una API de tipo REST en la cual podemos construir un front con HTML simplemente accediendo a la API REST de un sitio web, y poder extraer categorías, etiquetas, artículos, información de los usuarios, y no tener que depender de los fronts de las plantillas de WordPress.
La mayoría de APIs externas facilitan una documentación para que sepas como se pueden usar, diciéndote cuales son las rutas o los endpoints, y de tal manera debes recoger la información.
Comercios electrónicos como Amazon tienen sus propias APIs y son externas porque no son nativas del navegador, si no que las han hecho terceras personas.
Qué es REST
REST es un término acuñado en una tesis doctoral de una persona llamada Roy Fielding al que se le considera el padre de la especificación HTTP, fue de las personas que estableció las reglas que tiene este protocolo, y hay que recordar que el protocolo HTTP es en el que navegamos en Internet. REST significa REpresentational State Transfer o Transferencia del Estado Representacional, y un servicio REST es un conjunto de restricciones con las que podemos crear un estilo de arquitectura de software que es el que se viene desarrollando con toda la nueva hornada de frameworks reactivos como son React, Angular, Vue, Svelt… hemos ido migrando de un modelo vista controlador a un esquema de arquitectura basada en REST.
REST se basa en las reglas y estándares del protocolo HTTP, y en la mayoría de las empresas así es como trabajan tanto en el desarrollo web como en el desarrollo nativo.
Característica REST
1. Relación cliente – servidor
A diferencia de lo que era un modelo vista controlador donde el controlador era el orquestador y el que se comunicaba con la base de datos y el que recibía las peticiones de los usuarios… en REST el cliente y el servidor están débilmente acoplados, lo que quiere decir que están separados, es decir, al cliente no le interesan los detalles de como se implementó el lado del servidor que le está devolviendo esa respuesta en formato JSON o XML, y al servidor no le interesa como el cliente va a utilizar esta información para pintarla en los datos, es por ello que se dice que están desacoplados.
2. Las API REST son sin estado
Cada petición recibida por el servidor se va a manejar de manera independiente, lo que evita que se mantengan sesiones conectadas como para hacer varias peticiones al mismo tiempo.
3. Las API REST son cacheables
Significa que tiene que haber un sistema de almacenamiento en caché para evitar repetitivas conexiones hacia un mismo recurso del servidor, lo que impactará de manera positiva en el rendimiento de las aplicaciones, acelerando el tiempo de carga de manera sustancial.
4.Interfaz uniforme
Una interfaz genérica que permita la administración entre la interacción entre el cliente y el servidor de una manera uniforme, lo que significa que para cada petición va a existir una URL única y con las características de como nosotros le vamos a enviar la información, o lo que es lo mismo, lo que se conoce como los end-points o puntos finales a los cuales vamos a acceder a cierto determinado recurso.
5. Sistema de capas
Del lado del servidor tiene que haber varias capas a la hora de implementarlas para estar previstos por si más adelante ese desarrollo escala porque se necesiten más características, la manera en que ha sido programada permite esa escalabilidad, capas para monitorizar el rendimiento, y la capa de seguridad (muy importante).
En el mundo del desarrollo web, como hemos dicho, este va a ser el modelo de arquitectura en el que vamos a estar trabajando.
¿Las API son el nuevo CRUD?
El CRUD es un concepto que viene de las bases de datos, que significa CREATE-READ-UPDATE-DELETE (crear – leer – actualizar – eliminar) que son las 4 operaciones básicas que podemos hacerle a una base de datos.
Las API REST trabajan con el protocolo HTTP, lo que viene a ser una operación de inserción, en REST va a ser un POST (lo que en bases de datos era un INSERT), una consulta se convierte en GET (lo que en bases de datos es SELECT), la actualización en PUT (en bases de datos se utiliza UPDATE), y para eliminar se utiliza DELETE (mismo término se utiliza en bases de datos).
Operaciones CRUD | Peticiones REST |
---|---|
INSERT | POST |
SELECT | GET |
UPDATE | PUT |
DELETE | DELETE |
La ventaja de las API de tipo REST es que como el cliente y el servidor están desacoplados (separados), a diferencia de la interdependencia que nos pedía el modelo vista controlador, podemos decidir en que base de datos queremos trabajar, si es SQL o NoSQL, en qué lenguaje de programación (Java, Node, PHP. Ruby, Phyton). Construimos nuestra API de tipo REST y lo único que hacemos es exponer al cliente, y el cliente no nos va a interesar el tipo de cliente que sea, mientras le expongamos la información en JSON y en XML que son dos formatos de intercambio de información perfectamente validados por los diferentes lenguajes y tecnologías de información, no nos importa si el front que nos está haciendo la petición es un front de una aplicación en Android, en Ios, para Windows, o en el navegador web hecha con Javascript. Al desacoplar todo ello, podemos tener diferentes fronts con diferentes necesidades, pero la parte del modelado de la base de datos y de la API sirve para todos estos escenarios.
Podemos pensar en servicios como Uber, o en las redes sociales, podemos verlo desde navegadores, aplicaciones nativas… lo único que cambia es el escenario de front (del cliente) pero los datos que se consumen están centralizados en la misma API de tipo REST.
Para poder aprender y trabajar con API REST vamos a tener que instalar en nuestro ordenador Node.js y Postman (o en su caso Insomnia).
En el siguiente capítulo vamos a descargar el JSON Server, crear nuestra API falsa y empezar a hacer pruebas de peticiones con esta aplicación Insomnia (o Postman).
Nota: tanto Insomnia como Postman soportan aplicaciones de tipo REST y también de tipo GraphQL.