ANÚNCIO

~/questoes/programacao

Por que FastAPI usa dependency injection para disponibilizar a sessão do banco?

Responda, confira o feedback e use o resultado para orientar sua revisão.
Aula de referência FastAPI: Banco de Dados, Modelos e Migrações
Para fixar

Por que FastAPI usa Dependency Injection para a Sessão do Banco

Conceito central

Dependency Injection é um padrão de design que permite que FastAPI forneça automaticamente uma sessão de banco de dados limpa para cada requisição, sem usar variáveis globais. Isso garante que dados de uma requisição não vazem para outra, mantendo o isolamento e facilitando testes.

Por que essa resposta faz sentido

Usar Dependency Injection evita variáveis globais e garante que cada requisição receba sua própria sessão isolada do banco. Isso previne bugs silenciosos onde dados de um usuário poderiam ser acessados por outro, e torna o código muito mais testável porque você consegue injetar uma sessão fake nos testes.

Armadilhas comuns

  • Confundir isolamento de requisições com melhoria de performance — Dependency Injection garante segurança de dados, não velocidade de queries.
  • Achar que variáveis globais funcionam bem para sessões — quando você usa uma variável global para a sessão, múltiplas requisições simultâneas competem pela mesma conexão, causando race conditions.
  • Pensar que Dependency Injection é apenas para testes — é principalmente para arquitetura saudável; testes se beneficiam como consequência.

Entenda as alternativas

A

Embora testes sejam facilitados como efeito colateral, o motivo principal não é automatizar testes. Dependency Injection é sobre arquitetura e isolamento de estado, não sobre automação de testes.

B

Dependency Injection não melhora a performance das queries SQL em si. A performance depende da otimização das queries, índices no banco e estrutura do código — não do padrão de injeção de dependência.

C

Essa é a razão principal. Variáveis globais compartilham estado entre todas as requisições, o que pode causar vazamento de dados. Dependency Injection cria isolamento: cada requisição recebe sua própria sessão limpa.

D

Múltiplos bancos de dados é um cenário avançado e diferente. Dependency Injection funciona com um ou múltiplos bancos, mas não é o motivo primário de sua existência em FastAPI.

Dica prática: Na próxima vez que escrever um endpoint em FastAPI, crie a sessão como parâmetro da função com o tipo `Session` e deixe FastAPI injetá-la. Nunca crie uma conexão global com `engine.connect()` fora das funções — isso quebraria o isolamento.

Revise pensando: Se você usa uma variável global para a sessão do banco e duas requisições chegam simultaneamente, o que poderia dar errado?