Una interfaz de programación de aplicaciones (o Application Programming Interface en inglés), comúnmente denominada como API, es una forma de comunicación entre dos sistemas de software. Imaginamos que tenemos un sistema llamado A y otro llamado B. B necesita cierta información de A, así que B llama a la API de A para obtenerlos.
Para que esto funcione, A necesita exponer, de alguna manera, un interfaz público. Este interfaz normalmente está documentado para que B pueda entender cómo pedirle la información a A. A puede que también tenga un interfaz privado al que B no puede acceder, es decir, que no se expone y queda, por tanto, restringido a B. Este último caso se denominaría una API privada.
Existen todo tipo de APIs, y aunque las APIs REST son las primeras que le vienen a la mente a la mayoría de los desarrolladores, no son las únicas. En este artículo profundizaremos en las arquitecturas de APIs más populares, como REST y GraphQL y desglosaremos sus diferentes características para entender mejor cuáles son sus principales diferencias.
¿Cómo funcionan las APIs?
A nivel fundamental, las APIs actúan como intermediarios entre dos componentes de software, definiendo reglas claras sobre cómo se envían y reciben datos, qué acciones se pueden realizar y cómo debe hacerse. A este conjunto de reglas se le denomina estándar, y ambas partes deben implementarlo para ser capaces de entenderse entre sí.
Hacer uso de las APIs facilita la comunicación entre sistemas, ya que no necesitan conocer todos los detalles internos de la implementación de cada uno. En su lugar, solo necesitan entender cómo interactuar con la API proporcionada.
En el caso específico de las APIs web, la comunicación ocurre entre un cliente y un servidor. El cliente inicia una petición (request en inglés) para obtener información del servidor, y el servidor recibe esta petición, realiza los cálculos necesarios y devuelve los resultados al cliente. Es decir, la comunicación entre el cliente y el servidor ocurre a través de peticiones.
¿Qué tipos de APIs hay?
Aunque comúnmente usamos el término API para referirnos a APIs web, esto no es necesariamente así. Las APIs sirven como una forma universal para que dos componentes de software se comuniquen, independientemente de si éstos están basados en web o no. Mientras que todas las APIs web son APIs, lo contrario no es siempre cierto (no todas las APIs son APIs web). Las APIs son herramientas versátiles que cualquier tipo de software puede usar para interactuar con otro.
Cuando hablamos acerca de APIs web, nos referimos a un subconjunto de APIs específicamente diseñadas para operar a través de una red y aunque normalmente nos referimos a internet, puede ser cualquier otra red privada o local. La comunicación en una API web sucede a través de los llamados puntos de acceso (o en inglés, API endpoints), que explicaremos a continuación.
¿Qué es un API endpoint?
Un API endpoint es un punto de acceso, que se representa como una URL, permitiendo que un cliente interactúe con un servidor. Cada endpoint en una API está asociado a una acción en el servidor, como por ejemplo, solicitar información, crear nuevos registros o actualizar datos existentes.
Cuando se ejecuta un endpoint se inicia una petición en el servidor y este, al recibirla, la procesa y devuelve el resultado al cliente. Este intercambio de ida y vuelta se realiza a través del protocolo HTTP mediante sockets TCP, y la información se transmite mediante mensajes HTTP.
Una petición HTTP contiene ciertos datos básicos, como el tipo de operación (por ejemplo GET, POST, PUT, DELETE), el endpoint específico de la API y cualquier parámetro adicional o datos requeridos para realizar la operación.
Al recibir una solicitud el servidor realiza las acciones necesarias. Luego, genera una respuesta que contiene el resultado de la petición solicitada, junto con otros datos relevantes. Esta respuesta se devuelve al cliente a través del mismo socket TCP y protocolo HTTP.
¿Cómo se crea una API?
A la hora de crear una API web, existen múltiples arquitecturas entre las cuales elegir, cada una con sus propias características, ventajas y casos de uso específicos.
Dos de las arquitecturas más populares y ampliamente utilizadas son REST (en inglés Representational State Transfer) y GraphQL. Aunque ambas son fiables, siguen filosofías diferentes. Por lo tanto, si estás a punto de comenzar a construir tu API, elige el patrón que se alinee mejor con tus requisitos.
REST vs GraphQL
REST, el paradigma más popular para construir APIs, es una arquitectura de software que se basa en gran medida en los métodos HTTP y utiliza múltiples endpoints para intercambiar información entre el cliente y el servidor. Sin embargo, una característica notable de REST es que sus endpoints a menudo devuelven más datos de los estrictamente necesarios, lo que puede causar tráfico de red excesivo.
Por el contrario, GraphQL adopta un enfoque diferente. En lugar de ser una arquitectura, GraphQL es un lenguaje que describe cómo un cliente debería obtener datos de un servidor. En el paradigma de GraphQL sólo se expone un endpoint y los desarrolladores que hacen uso de él piden al servidor únicamente la información que van a necesitar. Esta característica de GraphQL permite reducir la transmisión de datos no requeridos a través de la red.
Si bien REST y GraphQL proporcionan mecanismos para que los desarrolladores obtengan información de un servidor, sus diferentes filosofías en el uso de endpoints y la transmisión de datos los hacen adecuados para diferentes escenarios y preferencias en el amplio ámbito del desarrollo de APIs.