¿Qué hace Depends(get_db) en la firma de un endpoint de FastAPI?
Opciones
- Declara un import de Python que la función necesita para ejecutarse
- Llama a
get_dbe inyecta el resultado, con limpieza tras el yield (Opción correcta) - Crea una tarea en segundo plano que corre tras la respuesta
- Valida la respuesta del endpoint antes de enviarla
Respuesta
Le dice a FastAPI que llame a get_db e inyecte su resultado (dependency injection), incluida la limpieza del generator
Por qué
FastAPI ve db = Depends(get_db), llama a get_db() en cada petición y pasa el resultado a tu función.
Si get_db usa yield, el código después del yield (por ejemplo cerrar la sesión de base de datos) se ejecuta tras la respuesta.
En los tests puedes reemplazarlo: app.dependency_overrides[get_db] = fake_db.
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.get("/users/{uid}")
def read_user(uid: int, db = Depends(get_db)):
return db.get(User, uid)Recuerda
Depends = la dependency injection de FastAPI.