Trabajar con APIs
Una API es la puerta trasera de cualquier servicio web. Con Python y la librería requests, puedes conectarte a OpenAI, GitHub, Spotify, o cualquier otro servicio en cuestión de minutos.
1. ¿Qué es una API REST?
Una API REST es una interfaz que te permite comunicarte con un servidor web usando peticiones HTTP estándar. En lugar de abrir un navegador, tú envías órdenes desde tu código Python.
GET
Pide datos al servidor. "Dame la información del usuario con ID 42."
POST
Envía datos al servidor. "Crea un nuevo recurso con esta información."
PUT / PATCH
Actualiza un recurso existente completo o parcialmente.
DELETE
Elimina un recurso del servidor.
2. Tu Primera Petición con requests
La librería requests hace que consumir APIs sea casi como leer una frase en inglés. Aquí traemos datos públicos de una API de prueba:
import requests
# Petición GET a una API pública (no necesita autenticación)
url = "https://jsonplaceholder.typicode.com/posts/1"
respuesta = requests.get(url)
# Verificar que todo fue bien (200 = OK)
print(respuesta.status_code) # 200
# Convertir el JSON de respuesta a diccionario Python
datos = respuesta.json()
print(datos["title"]) # "sunt aut facere repellat..."
print(datos["userId"]) # 1
# También puedes comprobar si fue exitosa con:
if respuesta.ok:
print("Petición exitosa")
3. Peticiones con Autenticación (API Key)
La mayoría de APIs de producción, como OpenAI, requieren que te identifiques con una API Key. Nunca la escribas directamente en el código; cárgala desde el entorno.
import os
import requests
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
url = "https://api.openai.com/v1/chat/completions"
# Las credenciales van en las cabeceras (headers)
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
# El cuerpo de la petición (payload) va en formato JSON
payload = {
"model": "gpt-4o-mini",
"messages": [
{"role": "user", "content": "Explícame qué es una API en una línea."}
]
}
# POST con cabeceras y cuerpo JSON
respuesta = requests.post(url, headers=headers, json=payload)
datos = respuesta.json()
# Extraer la respuesta del modelo
texto = datos["choices"][0]["message"]["content"]
print(texto)
4. Manejo de Errores en APIs
Las APIs pueden fallar por múltiples razones: red caída, clave incorrecta, límite de rate, servidor saturado. Un código robusto siempre lo gestiona:
import requests
def consultar_api(url):
try:
respuesta = requests.get(url, timeout=10) # Máximo 10 segundos
respuesta.raise_for_status() # Lanza error si 4xx o 5xx
return respuesta.json()
except requests.exceptions.Timeout:
print("La petición tardó demasiado.")
except requests.exceptions.HTTPError as e:
print(f"Error HTTP {respuesta.status_code}: {e}")
except requests.exceptions.ConnectionError:
print("No se pudo conectar. Comprueba tu red.")
return None
timeout en tus peticiones. Sin él, si el servidor no responde, tu programa se quedará bloqueado indefinidamente.¿Listo para convertirte en un Maestro?
Potencia tu carrera con el Máster Completo: Python de la A a la Z. Domina Ciencia de Datos, ML y Deep Learning.