¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Leer y enviar datos con una API

Después de esta lección: Puedo leer y enviar datos a través de una API.

Lección de 45 min1 comandoLaboratorio de PostgreSQL y PostgREST: una base de datos y una API REST en el navegador

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

PalabraQué significaEjemplo
APIuna puerta por la que un programa pide datos a otro
JSONun texto con datos en pares de nombre y valor{"nombre": "Pan"}
GETel método para pedir datos
POSTel método para enviar datos nuevos
Cuerpolos 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

TipoEjemploSe parece en Python a
Texto"Pan"str
Número1.2float
Verdadero o falsotrueTrue
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

Comando
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étodoQué haceEjemplo en una tiendaCódigo habitual
GETPide datosVer la lista de productos200
POSTEnvía datos nuevosAñadir un producto201

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Así se vería una petición POST con curl

Código: bash
# 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

Código: python
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.

Sobre este laboratorio y su código: Laboratorio de PostgreSQL y PostgREST: una base de datos y una API REST en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.