Saltar al contenido

Dependencias Globales

Para algunos tipos de aplicaciones podrías querer añadir dependencias a toda la aplicación.

De manera similar a como puedes añadir dependencias a los path operation decorators, puedes añadirlas a la aplicación FastAPI.

En ese caso, se aplicarán a todos los path operations en la aplicación:

from typing import Annotated

from fastapi import Depends, FastAPI, Header, HTTPException


async def verify_token(x_token: Annotated[str, Header()]):
    if x_token != "fake-super-secret-token":
        raise HTTPException(status_code=400, detail="X-Token header invalid")


async def verify_key(x_key: Annotated[str, Header()]):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")
    return x_key


app = FastAPI(dependencies=[Depends(verify_token), Depends(verify_key)])


@app.get("/items/")
async def read_items():
    return [{"item": "Portal Gun"}, {"item": "Plumbus"}]


@app.get("/users/")
async def read_users():
    return [{"username": "Rick"}, {"username": "Morty"}]
🤓 Otras versiones y variantes

Consejo

Preferible usar la versión con Annotated si es posible.

from fastapi import Depends, FastAPI, Header, HTTPException


async def verify_token(x_token: str = Header()):
    if x_token != "fake-super-secret-token":
        raise HTTPException(status_code=400, detail="X-Token header invalid")


async def verify_key(x_key: str = Header()):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")
    return x_key


app = FastAPI(dependencies=[Depends(verify_token), Depends(verify_key)])


@app.get("/items/")
async def read_items():
    return [{"item": "Portal Gun"}, {"item": "Plumbus"}]


@app.get("/users/")
async def read_users():
    return [{"username": "Rick"}, {"username": "Morty"}]

Y todas las ideas de la sección sobre añadir dependencias a los path operation decorators siguen aplicando, pero en este caso, a todos los path operations en la aplicación.

Dependencias para grupos de path operations

Más adelante, al leer sobre cómo estructurar aplicaciones más grandes (Aplicaciones Más Grandes - Múltiples Archivos), posiblemente con múltiples archivos, aprenderás cómo declarar un único parámetro dependencies para un grupo de path operations.