Puedes añadir middleware a las aplicaciones FastAPI.
Un "middleware" es una función que trabaja con cada request antes de que sea procesada por cualquier operación de path específica. Y también con cada response antes de retornarla.
Toma cada request que llega a tu aplicación.
Luego puede hacer algo con esa request o ejecutar cualquier código necesario.
Luego pasa la request para que sea procesada por el resto de la aplicación (por alguna operación de path).
Luego toma la response generada por la aplicación (por alguna operación de path).
Puede hacer algo con esa response o ejecutar cualquier código necesario.
Luego retorna la response.
Detalles Técnicos
Si tienes dependencias con yield, el código de salida se ejecutará después del middleware.
Si había alguna tarea en segundo plano (cubierto en la sección Tareas en Segundo Plano, lo verás más adelante), se ejecutarán después de todos los middlewares.
Puedes añadir código para que se ejecute con la request, antes de que cualquier operación de path la reciba.
Y también después de que la response sea generada, antes de retornarla.
Por ejemplo, podrías añadir un header personalizado X-Process-Time conteniendo el tiempo en segundos que tomó procesar la request y generar una response:
Cuando añades múltiples middlewares usando ya sea el decorador @app.middleware() o el método app.add_middleware(), cada nuevo middleware envuelve la aplicación, formando una pila. El último middleware añadido es el más externo, y el primero es el más interno.
En el camino de la request, el middleware más externo se ejecuta primero.