Frogames Python Expert
Cursos Premium

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
Usa siempre el parámetro 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.

Ver ahora