Cómo pide el tiempo tu móvil
Una API es una puerta por la que un programa pide datos a otro programa. La app del tiempo de tu móvil no guarda los grados: los pide a una API y los dibuja.
Hoy aprendes cómo se piden y se envían datos por esa puerta. Lo harás en el idioma que usan casi todas las API, llamado JSON.
Al final de esta lección
Nota
Puedo leer y enviar datos a través de una API.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| API | una puerta por la que un programa pide datos a otro | |
| JSON | un texto con datos en pares de nombre y valor | {"nombre": "Pan"} |
| GET | el método para pedir datos | |
| POST | el método para enviar datos nuevos | |
| Cuerpo | los datos que viajan dentro de la petición o la respuesta |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
JSON guarda datos con nombre
JSON es un texto. Un objeto va entre llaves y tiene pares de nombre y valor, como "precio": 1.2. Una lista va entre corchetes.
Los nombres siempre van entre comillas dobles. Los números van sin comillas.
Ejemplo resuelto: los tipos de valor en JSON
| Tipo | Ejemplo | Se parece en Python a |
|---|---|---|
| Texto | "Pan" | str |
| Número | 1.2 | float |
| Verdadero o falso | true | True |
| Lista | [1, 2, 3] | list |
| Objeto | {"nombre": "Pan"} | dict |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pide la portada de la API
curl -s -o /dev/null -w '%{http_code}\n' http://api:3000/Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
GET pide datos y POST envía datos
Con GET pides algo y no cambias nada. Pedir la misma página mil veces no la estropea.
Con POST envías datos nuevos en el cuerpo de la petición. El servidor los guarda y contesta con un código, normalmente 201, que significa "creado".
Ejemplo resuelto: dos métodos, dos usos
| Método | Qué hace | Ejemplo en una tienda | Código habitual |
|---|---|---|---|
| GET | Pide datos | Ver la lista de productos | 200 |
| POST | Envía datos nuevos | Añadir un producto | 201 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Así se vería una petición POST con curl
# Ejemplo: solo funciona si existe la tabla notes
curl -s -X POST http://api:3000/notes \
-H 'Content-Type: application/json' \
-d '{"text": "comprar pan"}'Tu programa convierte el JSON en datos
La respuesta de una API llega como texto. Para usarla, tu programa la convierte con json.loads.
Desde ese momento es una lista o un diccionario normal de Python. Pruébalo con esta respuesta de una tienda.
Convierte una respuesta y recórrela
import json
# Esta respuesta es un ejemplo, escrita a mano
respuesta = '[{"name": "Pan", "price": 1.2}, {"name": "Leche", "price": 0.9}]'
productos = json.loads(respuesta)
for producto in productos:
print(producto["name"], "cuesta", producto["price"], "euros")
# Cambia Leche por Zumo y su precio por 1.5, y pulsa Ejecutar
Un error frecuente
Advertencia
Mucha gente cree que la respuesta ya es una lista de Python. Llega como texto, aunque lo parezca. Si no usas json.loads, respuesta[0] te da el carácter [ y no el primer producto.
Para ir más lejos: una respuesta rota
Cambia en el ejemplo una comilla doble por una simple y ejecuta otra vez. Verás un error, porque JSON exige comillas dobles.
Escribe una frase que explique por qué una API estricta evita errores de lectura.