Misión 3 · Lección 9
Consumo de APIs Externas en Flask
Objetivos
- Comprender cómo realizar peticiones HTTP desde Flask.
- Consumir datos de APIs externas.
- Integrar la información obtenida en vistas y templates.
Librerías para consumo de APIs
- requests — la más usada para HTTP en Python.
- httpx — alternativa moderna y asíncrona.
pip install requests
Petición GET
import requests
@app.route("/clima")
def clima():
r = requests.get("https://api.weatherapi.com/v1/current.json",
params={"key": "API_KEY", "q": "Bogotá"})
data = r.json()
return f"Temperatura: {data['current']['temp_c']}°C"
Petición POST
r = requests.post("https://jsonplaceholder.typicode.com/posts",
json={"title": "nuevo", "body": "contenido"})
print(r.json())
Mostrar datos en un template
@app.route("/usuarios")
def usuarios():
r = requests.get("https://jsonplaceholder.typicode.com/users")
data = r.json()
return render_template("usuarios.html", usuarios=data)
<ul>
{% for u in usuarios %}
<li>{{ u["name"] }} - {{ u["email"] }}</li>
{% endfor %}
</ul>
Manejo de Errores
try:
r = requests.get("https://api.invalida.com/data", timeout=5)
r.raise_for_status()
except requests.exceptions.RequestException as e:
print("Error:", e)
Buenas Prácticas
- Usar timeout en las peticiones.
- Manejar errores con
try/except.
- Guardar claves API en variables de entorno.
Ejemplo completo
@app.route("/pokemon/<nombre>")
def pokemon(nombre):
url = f"https://pokeapi.co/api/v2/pokemon/{nombre}"
r = requests.get(url)
data = r.json()
return render_template("pokemon.html", poke=data)
Extensiones útiles
- Flask-RESTful: simplifica creación y consumo de APIs.
- Flask-Caching: cachea resultados para no llamar repetidamente a la API.
Ejercicio Guiado
- Instala la librería
requests.
- Crea una ruta que consulte usuarios de
jsonplaceholder.typicode.com.
- Muestra los datos en un template HTML.
- Agrega manejo de errores si la API no responde.