Qué es una API — las reglas acordadas entre programas para intercambiar datos, y JSON

Este artículo forma parte del curso Fundamentos de informática, que construye desde cero los conocimientos prácticos de informática que necesitas como mínimo para programar y hacer vibe coding.
Llamar a una API es enviar una solicitud a una URL determinada y recibir una respuesta. Con diagramas veremos cómo leer el JSON y los códigos de estado.

Este artículo trata las API.

Una API son las reglas acordadas con las que los programas intercambian datos entre sí.

Veremos las tres partes de una llamada y JSON, el formato de texto que vuelve.

  • Qué envía en realidad «llamar a una API», y adónde
  • Las tres partes de una llamada — URL, método y respuesta
  • Cómo leer las claves y los valores del JSON que vuelve
  • El código de estado que indica si hubo éxito o fallo, y qué hacer con cada número

«Llamar a una API» es enviar una solicitud a una URL determinada y recibir una respuesta

Los datos del tiempo no los tiene tu propio programa, sino el servidor de un servicio externo.

La API que se llama con solicitudes y respuestas HTTP es una Web API, y cada una de las URL que acepta es un endpoint.

Tanto un servicio externo como el servidor de my-app pueden ser el lado que provee.

Y una sola pantalla tampoco llama necesariamente a un único endpoint.

Una sola pantalla llama a tres endpoints
Abrir la páginadel tiempo/weatherTemp actual/forecastPronóstico semanal/newsAvisos3 JSON en unasola pantalla
Para mostrar una única página del tiempo, el navegador envía tres solicitudes por separado. Los tres JSON que vuelven se juntan en una sola pantalla.

Antes de que aparezca la página se producen tres idas y vueltas de solicitud y respuesta.

Lo único a lo que el navegador se conecta directamente es al servidor de my-app.

Ese mismo servidor es quien provee visto desde el navegador, y quien llama visto desde la API del tiempo.

Llamar a una API es enviar y recibir

Llamar a una API es enviar una solicitud a una URL determinada y recibir la respuesta que vuelve.

Cada una de esas URL es un endpoint; quien llama puede ser el navegador o tu propio servidor, y quien provee tampoco es necesariamente un servicio externo.

Las tres partes de una llamada — URL, método y respuesta

En las instrucciones y en la documentación solo se escriben tres cosas.

Adónde se envía (URL), qué quieres hacer (método) y qué vuelve (respuesta).

La primera, la URL, reparte su papel entre lo que va antes del ? y lo que va después.

Qué hay dentro de una URL que llama a la API del tiempo
https://api.example.com/weather?city=tokyo&units=metric
https://api.example.com/weather
  • Antes del ?. El endpoint que acepta la solicitud
  • Si cambias /weather por /forecast, es otro endpoint
?city=tokyo&units=metric
  • Después del ?. Aquí se escriben las condiciones de los datos que quieres
city=tokyo
  • Primera condición. Se escribe con la forma nombre=valor
units=metric
  • Segunda condición. Se une a la anterior con &
El marco exterior es una URL entera. Lo que va antes del ? es adónde se envía la solicitud; lo que va después son las condiciones de los datos que quieres. Las condiciones se encadenan con & tantas como quieras.

Lo que va detrás del ? es un parámetro (query parameter; una condición de los datos que quieres, puesta al final de la URL con la forma nombre=valor), también llamado parámetro de consulta.

La segunda parte es el método (HTTP method; una palabra fijada, como GET o POST, que indica qué quieres hacer con la solicitud).

Se escribe al principio de la línea y cambia el comportamiento aunque envíes a la misma URL.

GET no cambia los datos del otro lado, pero POST los cambia en el momento en que se envía.

En las instrucciones aparece escrito con el método y la URL uno detrás del otro.

Las líneas que empiezan por # son la explicación, y la línea de debajo de cada una es cómo se llama.

# Obtener el tiempo. Primero el método, después la URL (al final, los parámetros)
GET https://api.example.com/weather?city=tokyo

# Registrar una reserva. Misma URL, distinto método, distinto comportamiento
POST https://example.com/reservations

El documento que reúne cómo se llama y la forma de la respuesta que vuelve es la documentación de la API (API reference).

Cuando las instrucciones dicen «consulta la documentación de la API», es ahí donde buscas las tres partes.

Antes de enviar solo decides dos cosas

Antes de enviar solo decides dos cosas: adónde lo envías y qué quieres hacer.

Adónde lo envías es la URL, y la parte anterior al ? es el endpoint; qué quieres hacer es el método. La tercera parte, la respuesta, es la única que no decides tú: lees lo que vuelve.

JSON es un formato de texto que describe los datos con pares de clave y valor

El «JSON que ha vuelto» de las instrucciones es el cuerpo de la respuesta.

JSON (JavaScript Object Notation; un formato hecho solo de texto que describe los datos con pares de clave y valor) es el formato más habitual para el cuerpo de las Web API.

El JSON que devuelve la API del tiempo tiene esta forma.

{
  "city": "Tokyo",
  "temp": 23.5,
  "rain": false,
  "forecast": [
    { "day": "mon", "high": 25 },
    { "day": "tue", "high": 22 }
  ]
}

Lo que hay en la lista son pares de clave y valor (key / value; la clave es el nombre puesto a un valor, y el valor es el contenido al que apunta ese nombre).

En "temp": 23.5, temp es la clave y 23.5 es el valor; la clave y el valor se unen con : y los pares se separan con ,.

Dentro de { } se listan los pares, y a veces ese valor es a su vez un [ ] o un { }.

Qué hay dentro de un JSON de la API del tiempo
Un JSON (de { a })
"city": "Tokyo"
  • La clave es city, el valor es la cadena Tokyo
"temp": 23.5
  • La clave es temp, el valor es el número 23.5 (sin " ")
"rain": false
  • La clave es rain, el valor es false (true o false)
"forecast": [ … ]
  • La clave es forecast, el valor es un array
{ "day": "mon", "high": 25 }
  • Primer elemento del array. Su contenido son otra vez pares de clave y valor
{ "day": "tue", "high": 22 }
  • Segundo elemento del array. Tiene las mismas claves que el primero
El marco exterior es un JSON, de { a }. Los cuatro de dentro son pares de clave y valor, y el cuarto valor es un array. Su contenido son otra vez pares entre { }.

El cuarto valor es un array (varios valores puestos en orden dentro de [ ]) y cada elemento va otra vez entre { }.

{ } y [ ] se pueden anidar en tantos niveles como haga falta.

Para sacar un elemento de un array lo señalas por número, como [0], y la numeración empieza en 0, no en 1.

Los valores que no son [ ] ni { } se escriben de tres formas, y se distinguen por si llevan " " o no.

Cómo distinguir los tres tipos de valor que no son [ ] ni { }
==="Tokyo"23.5falseCadenaNúmerotrue o false,uno de los dosVa entre " "No va entre " "Sin " ",en minúscula
La fila de arriba es el valor tal como está escrito en el JSON, la del medio es su tipo y la de abajo es cómo distinguirlo. Los dos unidos por una línea doble son el mismo valor dicho de dos maneras.

Tal como llega, el cuerpo es una única cadena larga, así que indicar una clave no te da el valor.

En los libros de iniciación primero lo conviertes, con una línea como JSON.parse, en algo cuyas claves se pueden leer, y luego señalas el valor por el nombre de la clave, como data.city.

La línea que escribisteAdónde va a mirar en el JSONValor que obtienes
data.cityLa clave exterior cityTokyo
data.tempLa clave exterior temp23.5
data.forecast[0].highLa clave high del primer elemento [0]25
data.tmpNo hay ninguna clave con ese nombreundefined

Solo en la última fila la clave está mal escrita a propósito, por un carácter.

Una clave mal escrita no da ningún error, así que, cuando obtengas undefined, lo primero es comparar cómo está escrita con el JSON.

El nombre lleva JavaScript dentro, pero se usa en las respuestas de las API porque cualquier lenguaje puede leerlo y escribirlo.

JSON solo son pares de nombre y contenido

JSON no es más que una secuencia de texto que lista pares formados por un nombre y su contenido.

El nombre es la clave y el contenido es el valor; tal como llega es una única cadena larga, así que lo conviertes en algo legible por clave antes de sacar los valores.

La respuesta no siempre es un éxito — el código de estado decide qué haces

La API del tiempo funciona fuera de tu propio programa, así que la llamada puede fallar.

Por eso la respuesta no llega solo con el cuerpo.

Mira por partes lo que vuelve.

Qué hay dentro de una respuesta que vuelve
Una respuesta
El número de tres cifras del principio
  • 200 es éxito, 404 es fallo
  • Mira aquí antes de leer el cuerpo
El cuerpo (JSON)
  • Aun siendo la misma API del tiempo, el contenido cambia entre éxito y fallo
El cuerpo cuando hay éxito
  • { "city": "Tokyo", "temp": 23.5 }
  • Puedes leer la temperatura desde la clave temp
El cuerpo cuando hay fallo
  • { "error": "city not found" }
  • No hay clave temp, solo el motivo
El marco exterior es una respuesta. Delante lleva un número de tres cifras y detrás va el cuerpo. Lo que hay en el cuerpo cambia según sea éxito o fallo.

Las tres cifras del principio son el código de estado (status code; el número que indica si hubo éxito o fallo y de qué tipo).

Mira primero el número y lee las claves del cuerpo solo cuando hay éxito.

No hay que memorizar las tres cifras: la primera cifra decide qué haces después.

La primera cifra y qué hacer después
===Empieza por 2200 y otrosEmpieza por 4404, 401 y otrosEmpieza por 5500 y otrosVolvió tal comose pidióHay un problemaen lo enviadoFallo dentro dequien proveeSeguir leyendoclaves del cuerpoCorregir URLy reenviarEsperar un pocoy volver a llamar
La fila de arriba es la primera cifra del número, la del medio es lo que ha ocurrido y la de abajo es lo que hace quien llama. Los dos unidos por una línea doble son el número y su significado, lo mismo dicho de dos maneras.

Aun con la misma API del tiempo, el número que vuelve cambia según lo que enviaste y según el estado de quien provee.

Además del 404, cuando ocurre un fallo en el lado que provee vuelve un 500.

Si envías algo distinto, cambian el número que vuelve y lo que haces después
?city=tokyo?city=tokioMal escrito?city=tokyoFalla quien provee200404500IncluyetempSolo el motivoPuede no serJSONMostrar la tempMostrar «no sepuede obtener»Esperar yvolver a llamar
Cada fila es una llamada. De izquierda a derecha: el parámetro enviado, el número que vuelve, lo que hay en el cuerpo y lo que hace my-app.

404 no es solo el número de «esta página no existe»: en una API también vuelve cuando no hay datos que cumplan las condiciones del parámetro.

Si llamas siguiendo las instrucciones y vuelve un 404, compara la escritura y los parámetros con la documentación de la API.

Entre los números que empiezan por 4, el 401 es el de cuando no hay nada que indique quién llama, o lo que hay no es correcto.

Lo que se añade a la solicitud para indicarlo es la clave de API.

Mira el número antes de leer el cuerpo

Cuando vuelve una respuesta, mira el número antes de leer el cuerpo.

Si empieza por 2, el cuerpo lleva la clave que quieres; si empieza por 4, corrige la URL y las condiciones que enviaste; si empieza por 5, espera un poco y vuelve a llamar.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1En las instrucciones, ¿qué hace el programa cuando «llama a la API del tiempo»?

Pregunta 2En el fragmento de JSON "temp": 23.5, ¿qué es temp?

Pregunta 3Cuando llamas a la API del tiempo y vuelve el código de estado 404, ¿qué compruebas primero?