Python es uno de los lenguajes más usados para interactuar con APIs REST, tanto en:
👉 Las dos librerías más comunes son: requests (sencilla y estable) y httpx (moderna, con soporte de asincronía).
Instalación
pip install requests
import requests
resp = requests.get("https://jsonplaceholder.typicode.com/users/1")
if resp.status_code == 200:
data = resp.json()
print("Usuario:", data["name"], "-", data["email"])
else:
print("Error:", resp.status_code)
👉 Flujo: petición → verificar código → convertir a JSON → procesar datos.
import requests
nuevo_post = {
"title": "Nuevo Post",
"body": "Contenido de ejemplo",
"userId": 1
}
resp = requests.post("https://jsonplaceholder.typicode.com/posts", json=nuevo_post)
print("Status:", resp.status_code)
print("Respuesta:", resp.json())
👉 Con el parámetro json=
, requests convierte automáticamente el objeto Python en JSON.
import requests
actualizar = {
"id": 1,
"title": "Título actualizado",
"body": "Contenido modificado",
"userId": 1
}
resp = requests.put("https://jsonplaceholder.typicode.com/posts/1", json=actualizar)
print("Respuesta:", resp.json())
import requests
cambio = { "title": "Título con PATCH" }
resp = requests.patch("https://jsonplaceholder.typicode.com/posts/1", json=cambio)
print("Respuesta:", resp.json())
import requests
resp = requests.delete("https://jsonplaceholder.typicode.com/posts/1")
print("Código de estado:", resp.status_code)
En muchas APIs, hay que enviar tokens de autenticación en el header.
import requests
headers = {
"Authorization": "Bearer 12345",
"Accept": "application/json"
}
resp = requests.get("https://api.ejemplo.com/pedidos", headers=headers)
print(resp.status_code, resp.json())
Instalación
pip install httpx
Características principales
async/await
.import httpx
resp = httpx.get("https://jsonplaceholder.typicode.com/users/1")
print(resp.status_code, resp.json())
import httpx
import asyncio
async def main():
async with httpx.AsyncClient() as client:
resp = await client.get("https://jsonplaceholder.typicode.com/users")
print(resp.status_code)
print(resp.json())
asyncio.run(main())
👉 Ideal cuando hay que consultar varias APIs en paralelo sin bloquear el programa.
import httpx
nuevo_usuario = { "nombre": "Laura", "email": "laura@ejemplo.com" }
resp = httpx.post("https://jsonplaceholder.typicode.com/users", json=nuevo_usuario)
print(resp.status_code, resp.json())
import httpx
headers = {
"Authorization": "Bearer 12345",
"Accept": "application/json"
}
resp = httpx.get("https://api.ejemplo.com/datos", headers=headers)
print(resp.json())
Tanto con requests como con httpx es importante capturar excepciones:
import requests
try:
resp = requests.get("https://api.ejemplo.com/datos", timeout=5)
resp.raise_for_status() # Lanza error si no es 200-299
print(resp.json())
except requests.exceptions.Timeout:
print("La petición tardó demasiado")
except requests.exceptions.HTTPError as err:
print("Error HTTP:", err)
except Exception as e:
print("Error general:", e)
👉 Esto evita que el programa se rompa si la API falla.
import requests
url = "https://jsonplaceholder.typicode.com/posts"
resp = requests.get(url)
if resp.status_code == 200:
productos = resp.json()
for p in productos[:5]:
print(f"ID: {p['id']} - Título: {p['title']}")
else:
print("Error al obtener productos:", resp.status_code)
👉 Simulación de obtener productos de una tienda usando JSONPlaceholder.
requests
httpx
timeout
para evitar bloqueos (timeout=5
).try/except
.Session
en requests, AsyncClient
en httpx) en lugar de abrir conexión cada vez.Python es excelente para consumir APIs REST gracias a librerías como requests y httpx.
👉 En resumen: con Python, consumir APIs REST es rápido, seguro y flexible.