Middleware Avançado¶
🌐 Tradução por IA e humanos
Esta tradução foi feita por IA orientada por humanos. 🤝
Ela pode conter erros de interpretação do significado original ou soar pouco natural, etc. 🤖
Você pode melhorar esta traduçãoajudando-nos a orientar melhor o LLM de IA.
No tutorial principal você leu como adicionarMiddleware Personalizado à sua aplicação.
E então você também leu como lidar comCORS com oCORSMiddleware.
Nesta seção, veremos como usar outros middlewares.
Adicionando middlewares ASGI¶
Como oFastAPI é baseado no Starlette e implementa a especificaçãoASGI, você pode usar qualquer middleware ASGI.
O middleware não precisa ser feito para o FastAPI ou Starlette para funcionar, desde que siga a especificação ASGI.
No geral, os middlewares ASGI são classes que esperam receber um aplicativo ASGI como o primeiro argumento.
Então, na documentação de middlewares ASGI de terceiros, eles provavelmente dirão para você fazer algo como:
fromunicornimportUnicornMiddlewareapp=SomeASGIApp()new_app=UnicornMiddleware(app,some_config="rainbow")Mas, o FastAPI (na verdade, o Starlette) fornece uma maneira mais simples de fazer isso que garante que os middlewares internos lidem com erros do servidor e que os manipuladores de exceções personalizados funcionem corretamente.
Para isso, você usaapp.add_middleware() (como no exemplo para CORS).
fromfastapiimportFastAPIfromunicornimportUnicornMiddlewareapp=FastAPI()app.add_middleware(UnicornMiddleware,some_config="rainbow")app.add_middleware() recebe uma classe de middleware como o primeiro argumento e quaisquer argumentos adicionais a serem passados para o middleware.
Middlewares Integrados¶
FastAPI inclui vários middlewares para casos de uso comuns, veremos a seguir como usá-los.
Detalhes Técnicos
Para os próximos exemplos, você também poderia usarfrom starlette.middleware.something import SomethingMiddleware.
FastAPI fornece vários middlewares emfastapi.middleware apenas como uma conveniência para você, o desenvolvedor. Mas a maioria dos middlewares disponíveis vem diretamente do Starlette.
HTTPSRedirectMiddleware¶
Garante que todas as requisições devem serhttps ouwss.
Qualquer requisição parahttp ouws será redirecionada para o esquema seguro.
fromfastapiimportFastAPIfromfastapi.middleware.httpsredirectimportHTTPSRedirectMiddlewareapp=FastAPI()app.add_middleware(HTTPSRedirectMiddleware)@app.get("/")asyncdefmain():return{"message":"Hello World"}TrustedHostMiddleware¶
Garante que todas as requisições recebidas tenham um cabeçalhoHost corretamente configurado, a fim de proteger contra ataques de cabeçalho de host HTTP.
fromfastapiimportFastAPIfromfastapi.middleware.trustedhostimportTrustedHostMiddlewareapp=FastAPI()app.add_middleware(TrustedHostMiddleware,allowed_hosts=["example.com","*.example.com"])@app.get("/")asyncdefmain():return{"message":"Hello World"}Os seguintes argumentos são suportados:
allowed_hosts- Uma lista de nomes de domínio que são permitidos como nomes de host. Domínios com coringa, como*.example.com, são suportados para corresponder a subdomínios. Para permitir qualquer nome de host, useallowed_hosts=["*"]ou omita o middleware.www_redirect- Se definido como True, as requisições para versões sem www dos hosts permitidos serão redirecionadas para suas versões com www. O padrão éTrue.
Se uma requisição recebida não for validada corretamente, uma resposta400 será enviada.
GZipMiddleware¶
Gerencia respostas GZip para qualquer requisição que inclua"gzip" no cabeçalhoAccept-Encoding.
O middleware lidará com respostas padrão e de streaming.
fromfastapiimportFastAPIfromfastapi.middleware.gzipimportGZipMiddlewareapp=FastAPI()app.add_middleware(GZipMiddleware,minimum_size=1000,compresslevel=5)@app.get("/")asyncdefmain():return"somebigcontent"Os seguintes argumentos são suportados:
minimum_size- Não comprima respostas menores que este tamanho mínimo em bytes. O padrão é500.compresslevel- Usado durante a compressão GZip. É um inteiro variando de 1 a 9. O padrão é9. Um valor menor resulta em uma compressão mais rápida, mas em arquivos maiores, enquanto um valor maior resulta em uma compressão mais lenta, mas em arquivos menores.
Outros middlewares¶
Há muitos outros middlewares ASGI.
Por exemplo:
Para checar outros middlewares disponíveis, confiraDocumentação de Middlewares do Starlette e aLista Incrível do ASGI.







