📊 Capítulo 04: Injeção de Dependências com Depends
Especialização Backend com Python & FastAPI
🗺️ A Árvore de Injeção de Dependências do FastAPI
flowchart TD
EP["Endpoint: @router.get('/pedidos')"]
--> DEP_AUTH["Depends(obter_usuario_autenticado)"]
--> DEP_TOKEN["Depends(extrair_bearer_token)"]
EP --> DEP_DB["Depends(obter_sessao_db)"]
DEP_DB --> YIELD["yield session (Transação Aberta)"]
YIELD --> FINALLY["finally: session.close() (Encerramento Garantido)"]
style EP fill:#ede7f6,stroke:#512da8,stroke-width:2px
style DEP_AUTH fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style DEP_TOKEN fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style DEP_DB fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
style YIELD fill:#c8e6c9,stroke:#2e7d32,stroke-width:1.5px
style FINALLY fill:#ffebee,stroke:#d32f2f,stroke-width:1.5px
🎯 Slide 1: Como Funciona o Depends()
-
Inversão de Controle Declarativa: O FastAPI resolve dependências em árvore hierárquica antes de executar o corpo do endpoint.
-
Reutilização Total: Centraliza autenticação, conexões com banco de dados, paginação e permissões em funções simples.
- Sintaxe Elegante com
Annotated(Python 3.9+): ```python from typing import Annotated from fastapi import Depends
DatabaseSession = Annotated[AsyncSession, Depends(get_db)] CurrentUser = Annotated[Usuario, Depends(get_current_active_user)]
---
## 🎯 Slide 2: Ciclo de Vida com `yield` (Setup & Teardown)
```python
async def get_db_session() -> AsyncGenerator[AsyncSession, None]:
async with async_session_factory() as session:
try:
yield session # Entrega a sessão para o endpoint
finally:
await session.close() # Garante o fechamento mesmo em caso de erro!
- Funciona exatamente como um Context Manager nativo do Python!
🎯 Slide 3: Sobrescrita de Dependências em Testes (dependency_overrides)
# Em testes unitários / integração:
app.dependency_overrides[get_db_session] = override_test_db_session
app.dependency_overrides[get_current_active_user] = lambda: Usuario(id=1, role="ADMIN")
- Permite mockar bancos de dados e autenticação sem alterar uma única linha do código de produção!
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim