Entiende qué es una API en un minuto
Tags: api, spanish
Published: 2022-06-06 00:22:03

¿Recuerdas cuando le pedías apuntes a tu amiga antes del examen?

Algo así es una API.

Me explico.

Una API es fundamentalmente un mecanismo de comunicación. Dos programas que están corriendo en diferentes equipos necesitan intercambiar información. Mediante un protocolo uno le solicita al otro por algo y el segundo responde su solicitud.

Muchas páginas tienen APIs corriendo en su software que están libres para que otros equipos lo consuman.

Por ejemplo: aquí tenemos el API de Spotify.

![API de Spotify](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7a87tww587ytq8oqolf.png)

En este caso Spotify nos está diciendo que podemos acceder a información de su sistema como la letra de las canciones y su posición en la plataforma. Si logramos conectar nuestro software con el suyo, accederemos a millones de datos que ellos comparten.

Para hacerlo no tenemos que darle a ningún botón de descarga. De nuevo, la conexión que tendremos será directa entre su software y el nuestro, descargar archivos requeriría trabajar localmente y probablemente nos lleve más tiempo.

Entonces ¿Cómo lo hacemos?

Simplemente seguiremos un protocolo.

Un protocolo es una manera acordada de hacer las cosas. El protocolo da la receta para establecer la comunicación y si la seguimos adecuadamente accederemos a lo que queremos.

Spotify tiene su API para consumo a través de la web. El protocolo en que se basa una API en la web es HTTP, la cual establece comunicación entre un cliente y un servidor. El cliente hace una petición al servidor y el servidor da una respuesta.

Lo que requiere la petición son 4 cosas:
- URL: una dirección a la que acceder
- Method: una instrucción de como manejar la solicitud
- Headers: metadatos de la petición
- Body: el contenido de la petición

La respuesta requiere de 3 cosas:
- Code status: Un código informando el resultado de la solicitud
- Headers: información adicional sobre la petición
- Body: el contenido de la petición

Notemos que la petición y la respuesta tienen una estructura muy similar; la dirección y el método son solo necesarias para la petición y el código de estado solo necesario para la respuesta.

Lo bueno del protocolo HTTP es que puede ser usado con diferentes lenguajes. Así que a pesar de que la sintaxis varíe, podemos acceder al contenido con el mismo proceso.

Aquí tenemos algunos ejemplos de como manejar la petición.

Con JavaScript:
![Petición con JavaScript](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rr6yjx8fc2acpz1tb4cr.png)

Con Phyton:
![Petición con Python](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t25u6robu59e7f24rg9i.png)

Con Kotlin:
![Petición con Kotlin](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8v7dc03occ6uhu0upw1x.png)


En todas estas peticiones tenemos la URL en donde está el recurso:

```
https://spotify23.p.rapidapi.com/search/?q=%3CREQUIRED%3E&type=multi&offset=0&limit=10&numberOfTopResults=5
```

El _method_ para saber que hacer con la petición:

```
GET
```

En este caso GET indica que queremos recibir información.

Los _headers_ que nos cuentan información relevante.

```
'X-RapidAPI-Host': 'spotify23.p.rapidapi.com'
'X-RapidAPI-Key': 'SIGN-UP-FOR-KEY'
```

Vemos que necesitamos registrarnos para obtener una llave.

Y no tenemos _body_. Como queremos recibir y no compartir, no hay ningún contenido asociado.

Tan pronto hagamos esa solicitud el servidor procesará la solicitud y nos dará una respuesta. Ahí vemos la respuesta que nos da una solicitud con JavaScript.

Body:
![Body de solicitud](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kf90pir8zkiplyyjxhtm.png)

Headers:
![Headers de solicitud](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ba4xa541p1o1s0kipi7.png)
 
En el caso de las solicitudes a un API, no siempre obtendremos un código de estado, en este caso obtenemos una respuesta "success". Suficiente para saber que obtuvimos una respuesta satisfactoria a nuestra petición.

Voy a hacer una petición en JavaScript para buscar los albumes que Spotify tiene disponibles de The Beatles.  

![Búsqueda de álbumes de "beatles"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/svrqsu7jp1s1km1eltln.png)

La búsqueda la especifico en mi URL, indicando la palabra de búsqueda "?q=beatles", comentando que deseo los albumes "type=albums" y que limite la busqueda a 10 caracteres "limit=10". 

Utilizo como _method_ GET y me aseguro que los _headers_ tengan la clave que me solicitan. Como no voy a enviar contenido mi _body_ está vacío.

Perfecto. Ahora enviamos y esperamos la respuesta.

El servidor me respondió. Me comunica que hay 1000 resultados para la busqueda y me comparte los 10 items que le pedí.

Body:
![Body de respuesta a búsqueda de álbumes de "beatles"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dfdjl3gyvfcnebwov315.png)

Veamos que hay en los items:
![Respuesta de 10 items de álbumes](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hs74zpiyzzfpgr4d2ubo.png)

El contenido del primer item es:
![Contenido del primer item](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tpm0b6tc22fmfbbwbxxi.png)

Lo tenemos. El primer resultado es "Beatles For Sale (Remastered)".

También nos comparte unos datos sobre la respuesta.

Headers:
![Headers de respuesta a solicitud de álbumes](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hhbca0f4sdpyz9d56ruj.png)

Así de sencillo. Ahora ya entiendes que es una API.

Recapitulando: Las API son un mecanismo de comunicación entre dos _softwares_, que permiten que un cliente haga una petición a un servidor. Este proceso sigue un protocolo, que para APIs web es HTTP. El protocolo establece que habrá una petición y una respuesta. La petición necesita URL, _method_, _headers_, _body_. La respuesta tiene _status code_, _headers_ y _body_. Si hacemos la petición adecuadamente obtendremos exactamente lo que necesitamos.

Con esto millones de datos están a nuestro alcance.



**Notas adicionales:**
Este ejercicio utilizó el API de Spotify a través de RapidAPI. Esta página es muy intuitiva y muestra ejemplos de petición y respuesta. Puedes probarla directamente aqui: [Rapid API](https://rapidapi.com/Glavier/api/spotify23/)