Movatterモバイル変換


[0]ホーム

URL:


Saltar a contenido
Join theFastAPI Cloud waiting list 🚀
Follow@fastapi onX (Twitter) to stay updated
FollowFastAPI onLinkedIn to stay updated
Subscribe to theFastAPI and friends newsletter 🎉
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor

Middleware

🌐 Traducción por IA y humanos

Esta traducción fue hecha por IA guiada por humanos. 🤝

Podría tener errores al interpretar el significado original, o sonar poco natural, etc. 🤖

Puedes mejorar esta traducciónayudándonos a guiar mejor al LLM de IA.

Versión en inglés

Puedes añadir middleware a las aplicaciones deFastAPI.

Un "middleware" es una función que trabaja con cadarequest antes de que sea procesada por cualquierpath operation específica. Y también con cadaresponse antes de devolverla.

  • Toma cadarequest que llega a tu aplicación.
  • Puede entonces hacer algo a esarequest o ejecutar cualquier código necesario.
  • Luego pasa larequest para que sea procesada por el resto de la aplicación (por algunapath operation).
  • Después toma laresponse generada por la aplicación (por algunapath operation).
  • Puede hacer algo a esaresponse o ejecutar cualquier código necesario.
  • Luego devuelve laresponse.

Detalles Técnicos

Si tienes dependencias conyield, el código de salida se ejecutarádespués del middleware.

Si hubiera tareas en segundo plano (cubiertas en la secciónTareas en segundo plano, lo verás más adelante), se ejecutarándespués de todo el middleware.

Crear un middleware

Para crear un middleware usas el decorador@app.middleware("http") encima de una función.

La función middleware recibe:

  • Larequest.
  • Una funcióncall_next que recibirá larequest como parámetro.
    • Esta función pasará larequest a la correspondientepath operation.
    • Luego devuelve laresponse generada por la correspondientepath operation.
  • Puedes entonces modificar aún más laresponse antes de devolverla.
importtimefromfastapiimportFastAPI,Requestapp=FastAPI()@app.middleware("http")asyncdefadd_process_time_header(request:Request,call_next):start_time=time.perf_counter()response=awaitcall_next(request)process_time=time.perf_counter()-start_timeresponse.headers["X-Process-Time"]=str(process_time)returnresponse

Consejo

Ten en cuenta que los custom proprietary headers se pueden añadirusando el prefijoX-.

Pero si tienes custom headers que deseas que un cliente en un navegador pueda ver, necesitas añadirlos a tus configuraciones de CORS (CORS (Cross-Origin Resource Sharing)) usando el parámetroexpose_headers documentado enla documentación de CORS de Starlette.

Detalles Técnicos

También podrías usarfrom starlette.requests import Request.

FastAPI lo proporciona como una conveniencia para ti, el desarrollador. Pero viene directamente de Starlette.

Antes y después de laresponse

Puedes añadir código que se ejecute con larequest, antes de que cualquierpath operation la reciba.

Y también después de que se genere laresponse, antes de devolverla.

Por ejemplo, podrías añadir un custom headerX-Process-Time que contenga el tiempo en segundos que tomó procesar la request y generar una response:

importtimefromfastapiimportFastAPI,Requestapp=FastAPI()@app.middleware("http")asyncdefadd_process_time_header(request:Request,call_next):start_time=time.perf_counter()response=awaitcall_next(request)process_time=time.perf_counter()-start_timeresponse.headers["X-Process-Time"]=str(process_time)returnresponse

Consejo

Aquí usamostime.perf_counter() en lugar detime.time() porque puede ser más preciso para estos casos de uso. 🤓

Orden de ejecución con múltiples middlewares

Cuando añades múltiples middlewares usando ya sea el decorador@app.middleware() o el métodoapp.add_middleware(), cada nuevo middleware envuelve la aplicación, formando un stack. 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.

En el camino de la response, se ejecuta al final.

Por ejemplo:

app.add_middleware(MiddlewareA)app.add_middleware(MiddlewareB)

Esto da como resultado el siguiente orden de ejecución:

  • Request: MiddlewareB → MiddlewareA → ruta

  • Response: ruta → MiddlewareA → MiddlewareB

Este comportamiento de apilamiento asegura que los middlewares se ejecuten en un orden predecible y controlable.

Otros middlewares

Más adelante puedes leer sobre otros middlewares en laGuía del Usuario Avanzado: Middleware Avanzado.

Leerás sobre cómo manejarCORS con un middleware en la siguiente sección.


[8]ページ先頭

©2009-2026 Movatter.jp