Files
fastapi/docs/pt/docs/tutorial/middleware.md
Rafael de Oliveira Marques 540a83da65 🌐 Update Portuguese translations with LLM prompt (#14228)
* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* validated llm translation

* fix non-Annotated in llm-prompt

* rerun after a few changes in llm-prompt

* fix non-Annotated

* validated llm translation

* fix llm translation

* update outdated translations

* fix translation for operation IDs

* add header link

* add missing link

* fix line break

* fix diff

* fix llm translation

* fix 'Atualize' to 'Atualizar'

* update alternatives.md

* update async.md

* update fastapi-cli.md

* update features.md

* update help-fastapi.md

* update history-design-future.md

* update index.md

* update advanced/events.md

* update advanced/middleware.md

* update advanced/response-cookies.md

* update advanced/response-headers.md

* update advanced/templates.md

* update advanced/testing-websockets.md

* update advanced/using-request-directly.md

* update advanced/websockets.md

* update advanced/security/oauth2-scopes.md

* update deployment/cloud.md

* update deployment/manually.md

* update how-to/custom-request-and-route.md

* update how-to/migrate-from-pydantic-v1-to-pydantic-v2.md

* update tutorial/background-tasks.md

* update tutorial/first-steps.md

* update tutorial/handling-errors.md

* update tutorial/middleware.md

* update tutorial/request-files.md

* update tutorial/sql-databases.md

* update tutorial/static-files.md

* update tutorial/testing.md

* update tutorial/dependencies/dependencies-with-yield.md

* update advanced/advanced-dependencies.md

---------

Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2025-11-12 17:23:57 +01:00

4.4 KiB

Middleware

Você pode adicionar middleware à suas aplicações FastAPI.

Um "middleware" é uma função que manipula cada requisição antes de ser processada por qualquer operação de rota específica. E também cada resposta antes de retorná-la.

  • Ele pega cada requisição que chega ao seu aplicativo.
  • Ele pode então fazer algo com essa requisição ou executar qualquer código necessário.
  • Então ele passa a requisição para ser processada pelo resto do aplicativo (por alguma operação de rota).
  • Ele então pega a resposta gerada pelo aplicativo (por alguma operação de rota).
  • Ele pode fazer algo com essa resposta ou executar qualquer código necessário.
  • Então ele retorna a resposta.

/// note | Detalhes Técnicos

Se você tiver dependências com yield, o código de saída será executado depois do middleware.

Se houver alguma tarefa em segundo plano (abordada na seção Tarefas em segundo plano{.internal-link target=_blank}, que você verá mais adiante), ela será executada depois de todo o middleware.

///

Criar um middleware

Para criar um middleware, use o decorador @app.middleware("http") logo acima de uma função.

A função middleware recebe:

  • A request.
  • Uma função call_next que receberá o request como um parâmetro.
    • Esta função passará a request para a operação de rota correspondente.
    • Então ela retorna a response gerada pela operação de rota correspondente.
  • Você pode então modificar ainda mais o response antes de retorná-lo.

{* ../../docs_src/middleware/tutorial001.py hl[8:9,11,14] *}

/// tip | Dica

Tenha em mente que cabeçalhos proprietários personalizados podem ser adicionados usando o prefixo X-.

Mas se você tiver cabeçalhos personalizados desejando que um cliente em um navegador esteja apto a ver, você precisa adicioná-los às suas configurações CORS (CORS (Cross-Origin Resource Sharing){.internal-link target=_blank}) usando o parâmetro expose_headers documentado em Documentos CORS da Starlette.

///

/// note | Detalhes Técnicos

Você também pode usar from starlette.requests import Request.

FastAPI fornece isso como uma conveniência para você, o desenvolvedor. Mas vem diretamente da Starlette.

///

Antes e depois da response

Você pode adicionar código para ser executado com a request, antes que qualquer operação de rota o receba.

E também depois que a response é gerada, antes de retorná-la.

Por exemplo, você pode adicionar um cabeçalho personalizado X-Process-Time contendo o tempo em segundos que levou para processar a solicitação e gerar uma resposta:

{* ../../docs_src/middleware/tutorial001.py hl[10,12:13] *}

/// tip | Dica

Aqui usamos time.perf_counter() em vez de time.time() porque ele pode ser mais preciso para esses casos de uso. 🤓

///

Ordem de execução de múltiplos middlewares

Quando você adiciona múltiplos middlewares usando o decorador @app.middleware() ou o método app.add_middleware(), cada novo middleware envolve a aplicação, formando uma pilha. O último middleware adicionado é o mais externo, e o primeiro é o mais interno.

No caminho da requisição, o middleware mais externo roda primeiro.

No caminho da resposta, ele roda por último.

Por exemplo:

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

Isso resulta na seguinte ordem de execução:

  • Requisição: MiddlewareB → MiddlewareA → rota

  • Resposta: rota → MiddlewareA → MiddlewareB

Esse comportamento de empilhamento garante que os middlewares sejam executados em uma ordem previsível e controlável.

Outros middlewares

Mais tarde, você pode ler mais sobre outros middlewares no Guia do usuário avançado: Middleware avançado{.internal-link target=_blank}.

Você lerá sobre como manipular CORS com um middleware na próxima seção.