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 Avanzado

🌐 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

En el tutorial principal leíste cómo agregarMiddleware Personalizado a tu aplicación.

Y luego también leíste cómo manejarCORS con elCORSMiddleware.

En esta sección veremos cómo usar otros middlewares.

Agregando middlewares ASGI

ComoFastAPI está basado en Starlette e implementa la especificaciónASGI, puedes usar cualquier middleware ASGI.

Un middleware no tiene que estar hecho para FastAPI o Starlette para funcionar, siempre que siga la especificación ASGI.

En general, los middlewares ASGI son clases que esperan recibir una aplicación ASGI como primer argumento.

Entonces, en la documentación de middlewares ASGI de terceros probablemente te indicarán que hagas algo como:

fromunicornimportUnicornMiddlewareapp=SomeASGIApp()new_app=UnicornMiddleware(app,some_config="rainbow")

Pero FastAPI (en realidad Starlette) proporciona una forma más simple de hacerlo que asegura que los middlewares internos manejen errores del servidor y los controladores de excepciones personalizadas funcionen correctamente.

Para eso, usasapp.add_middleware() (como en el ejemplo para CORS).

fromfastapiimportFastAPIfromunicornimportUnicornMiddlewareapp=FastAPI()app.add_middleware(UnicornMiddleware,some_config="rainbow")

app.add_middleware() recibe una clase de middleware como primer argumento y cualquier argumento adicional que se le quiera pasar al middleware.

Middlewares integrados

FastAPI incluye varios middlewares para casos de uso común, veremos a continuación cómo usarlos.

Detalles Técnicos

Para los próximos ejemplos, también podrías usarfrom starlette.middleware.something import SomethingMiddleware.

FastAPI proporciona varios middlewares enfastapi.middleware solo como una conveniencia para ti, el desarrollador. Pero la mayoría de los middlewares disponibles provienen directamente de Starlette.

HTTPSRedirectMiddleware

Impone que todas las requests entrantes deben serhttps owss.

Cualquier request entrante ahttp ows será redirigida al esquema seguro.

fromfastapiimportFastAPIfromfastapi.middleware.httpsredirectimportHTTPSRedirectMiddlewareapp=FastAPI()app.add_middleware(HTTPSRedirectMiddleware)@app.get("/")asyncdefmain():return{"message":"Hello World"}

TrustedHostMiddleware

Impone que todas las requests entrantes tengan correctamente configurado el headerHost, para proteger contra ataques de HTTP Host Header.

fromfastapiimportFastAPIfromfastapi.middleware.trustedhostimportTrustedHostMiddlewareapp=FastAPI()app.add_middleware(TrustedHostMiddleware,allowed_hosts=["example.com","*.example.com"])@app.get("/")asyncdefmain():return{"message":"Hello World"}

Se soportan los siguientes argumentos:

  • allowed_hosts - Una list de nombres de dominio que deberían ser permitidos como nombres de host. Se soportan dominios comodín como*.example.com para hacer coincidir subdominios. Para permitir cualquier nombre de host, usaallowed_hosts=["*"] u omite el middleware.
  • www_redirect - Si se establece en True, las requests a versiones sin www de los hosts permitidos serán redirigidas a sus equivalentes con www. Por defecto esTrue.

Si una request entrante no se valida correctamente, se enviará un response400.

GZipMiddleware

Maneja responses GZip para cualquier request que incluya"gzip" en el headerAccept-Encoding.

El middleware manejará tanto responses estándar como en streaming.

fromfastapiimportFastAPIfromfastapi.middleware.gzipimportGZipMiddlewareapp=FastAPI()app.add_middleware(GZipMiddleware,minimum_size=1000,compresslevel=5)@app.get("/")asyncdefmain():return"somebigcontent"

Se soportan los siguientes argumentos:

  • minimum_size - No comprimir con GZip responses que sean más pequeñas que este tamaño mínimo en bytes. Por defecto es500.
  • compresslevel - Usado durante la compresión GZip. Es un entero que varía de 1 a 9. Por defecto es9. Un valor más bajo resulta en una compresión más rápida pero archivos más grandes, mientras que un valor más alto resulta en una compresión más lenta pero archivos más pequeños.

Otros middlewares

Hay muchos otros middlewares ASGI.

Por ejemplo:

Para ver otros middlewares disponibles, revisala documentación de Middleware de Starlette y laLista ASGI Awesome.


[8]ページ先頭

©2009-2026 Movatter.jp