Repaso
English
Backend y APIsIntermedioAPI-15

¿Qué hace Depends(get_db) en la firma de un endpoint de FastAPI?

Opciones

  1. Declara un import de Python que la función necesita para ejecutarse
  2. Llama a get_db e inyecta el resultado, con limpieza tras el yield (Opción correcta)
  3. Crea una tarea en segundo plano que corre tras la respuesta
  4. 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.

Términos clave

Practica esta pregunta en Repaso