~/questoes/programacao
Em FastAPI, a forma como você gerencia sessões de banco de dados impacta diretamente na segurança, isolamento de dados e facilidade de testes. O padrão correto é usar dependency injection para fornecer uma sessão fresca a cada requisição, evitando problemas de concorrência e vazamento de estado entre usuários.
Usar dependency injection para fornecer uma sessão limpa a cada requisição garante isolamento total entre requisições — cada usuário trabalha com sua própria instância de sessão. Isso evita condições de corrida, facilita testes unitários e mantém o código limpo e manutenível.
Variáveis globais compartilhadas causam sérios problemas: múltiplas requisições simultâneas competem pela mesma sessão, gerando race conditions. Além disso, dados de um usuário podem vazar para outro, e testes se tornam impredíveis porque compartilham estado.
Abrir e fechar sessões manualmente dentro de cada função é repetitivo e propenso a erros. Se você esquecer de fechar, recursos vazam. Também fica difícil de testar e viola o princípio de responsabilidade única — a rota se preocupa tanto com lógica quanto com gerenciamento de conexão.
Manter a sessão aberta durante toda execução é perigoso: a memória cresce indefinidamente, conexões ficam ocupadas, e todas as requisições compartilham o mesmo contexto. Em produção, isso causa travamentos e comportamentos imprevisíveis.
Dependency injection fornece uma sessão nova a cada requisição de forma automática e elegante. FastAPI injeta a sessão nos parâmetros da função, elimina boilerplate repetitivo e torna testes simples — você pode injetar uma sessão fake sem modificar a rota.