Inyección de Dependencias
FastAPI Depends compone proveedores por solicitud para configuraciones, bases de datos y autenticación.
Receta
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
from collections.abc import Generator
from fastapi import Depends, FastAPI
app = FastAPI()
def get_db() -> Generator[dict, None, None]:
db = {"items": []}
yield db
@app.get("/items")
def list_items(db: dict = Depends(get_db)):
return db["items"]Cuándo usar esto:
- Compartir sesiones de base de datos
- Componer dependencias de autenticación
- Anular proveedores en pruebas
Ejemplo Funcional
from fastapi import Depends, FastAPI, Header, HTTPException
app = FastAPI()
def get_settings():
return {"api_key": "dev"}
def verify(x_api_key: str | None = Header(default=None), settings=Depends(get_settings)):
if x_api_key != settings["api_key"]:
raise HTTPException(401)
@app.get("/secure", dependencies=[Depends(verify)])
def secure() -> dict[str, str]:
return {"ok": "true"}Lo que esto demuestra:
- Subdependencias
- Dependencias a nivel de ruta
- Puerta de autenticación basada en encabezados
Análisis Profundo
Cómo Funciona
- Las dependencias se resuelven una vez por solicitud y se almacenan en caché por identidad de la función invocable.
- Las dependencias
yieldejecutan la limpieza después de la respuesta. - Usa
app.dependency_overridesen pruebas.
Errores Comunes
- Validación de límites omitida: Datos inválidos llegan a las capas de persistencia. Solución: Valida con Pydantic o formularios del framework en el borde.
- Fugas de trazas de pila: Los clientes ven errores internos. Solución: Mapea excepciones a respuestas HTTP estables.
- Bloqueo de bucles de eventos asíncronos: Los trabajadores se bloquean bajo carga concurrente. Solución: Usa drivers asíncronos o envoltorios de pool de hilos.
- Secretos en control de código fuente: Credenciales filtradas a través del historial de git. Solución: Carga secretos desde variables de entorno o una bóveda en tiempo de ejecución.
- Falta de observabilidad: Los incidentes son difíciles de depurar. Solución: Agrega logs estructurados, métricas e IDs de solicitud.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Framework alternativo en este cookbook | Estándar del equipo o monolito existente | API nueva con restricciones diferentes |
| BaaS Gestionado | MVP solo CRUD | Autenticación, flujos de trabajo o necesidades de cumplimiento personalizadas |
| gRPC | RPC interno de alto rendimiento | Clientes HTTP públicos y acceso al navegador |
Preguntas Frecuentes
¿Cuándo debería adoptar la inyección de dependencias de FastAPI?
Úsala cuando los patrones y las compensaciones de esta página coincidan con tu API o límite de datos.
¿Cuál es el principal error de producción con la inyección de dependencias de FastAPI?
Omitir la validación, los tiempos de espera o los contratos de error explícitos en el borde HTTP.
¿Cómo pruebo la inyección de dependencias de FastAPI?
Usa el cliente de prueba del framework, anula las dependencias y verifica el estado más la forma del JSON.
¿La inyección de dependencias de FastAPI funciona con Python 3.14?
Sí, los ejemplos se dirigen a Python 3.14 con versiones de framework fijadas del pie de página de la pila.
¿Cómo se relaciona la inyección de dependencias de FastAPI con Pydantic 2?
Valida y serializa en los límites; mantén los servicios funcionando con objetos de dominio tipados.
¿Síncrono o asíncrono?
Prefiere rutas asíncronas cuando las E/S dominan; mantén el trabajo de CPU pequeño o descárgalo a los workers.
¿Dónde debe vivir la lógica de negocio?
Handlers delgados; los servicios poseen las reglas; los repositorios poseen las consultas.
¿Cómo documento las APIs?
Publica documentación OpenAPI o de esquema que coincida con los modelos de respuesta en el código.
¿Cómo manejo el versionado?
Versionado explícito por URL o encabezado con ventanas de deprecación; evita roturas silenciosas.
¿Qué debería leer a continuación?
Sigue los enlaces Relacionados para la siguiente capa de profundidad en esta sección.
¿Cómo me mantengo seguro?
Autentica a los llamadores, autoriza por recurso, limita la tasa y nunca registres secretos.
¿Primer paso para el rendimiento?
Mide la latencia de la base de datos y de los sistemas externos antes de cambiar de framework.
Relacionado
- Conceptos Básicos de FastAPI - Rutas y modelos principales
- Inyección de Dependencias - Proveedores por solicitud
- Pruebas de FastAPI - Patrones de cliente de prueba
- Despliegue de FastAPI - Servir en producción
Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.