Saltar para o conteúdo

← Blog

FastAPI no Mundo Real

FastAPI sozinho é um tutorial de 30 linhas. O que faz dele um serviço é tudo o que envolve o framework.

FastAPI alone is a 30-line tutorial. What makes it a service is everything that wraps the framework.

FastAPI sozinho é um tutorial de 30 linhas. O que faz dele um serviço é tudo o que envolve o framework.

O que o framework te dá de graça:
runtime ASGI, validação Pydantic, dependency injection, OpenAPI auto-gerado. Essa é a parte que todo mundo mostra no README.

O que você de facto monta à volta num projecto a sério:

1. App factory + `lifespan` em vez de um `app = FastAPI()` global ao módulo. Deixa os testes injectarem um `Settings` próprio e fecha o engine limpamente.
2. `pydantic-settings` para a config. Um `Settings(BaseSettings)` lê variáveis `APP_*` e o `.env`. Segredos obrigatórios como `APP_DB_PASSWORD` recusam-se a iniciar a app se faltarem. Acaba o `os.getenv` espalhado.
3. SQLAlchemy 2.0 async + asyncpg. `AsyncSession` vive numa dependency por request. Engine é descartado no shutdown via `lifespan`.
4. Repository pattern. As rotas ficam HTTP-shaped; o SQL vive no `BookRepository`. Erros de domínio como `BookNotFoundError` atravessam a fronteira como excepções tipadas — nunca `IntegrityError` a vazar.
5. Um único error envelope. Um conjunto de handlers mapeia tudo para `{error, message, code, path, details}`. Validação devolve 422, não 400.
6. API versionada. Rotas montadas em `/v1`. Seguro barato para o dia em que houver mudança breaking.
7. Logs JSON estruturados, configurados no `lifespan`. Cada linha é um objecto JSON — o log shipper parseia sem regex.
8. Schemas Pydantic como contrato — `BookCreate`, `BookReplace`, `BookPatch`, `BookOut`. O OpenAPI gera-se a partir deles; sem spec à mão.
9. Endpoint de health que faz um `SELECT 1` real através da mesma sessão da app. Apanha problemas de DSN/permissões no deploy, não em produção.
10. 100% de cobertura de testes sem mock de banco. SQLite em memória + dependency override; 71 testes em menos de um segundo. (Detalhe na parte 3 da série.)

O que deixei de fora de propósito: auth (depende da forma do deploy), CORS (só quando há um frontend cross-origin real), background workers (preocupação separada).

Este é o mapa. Os próximos três posts ampliam: as bibliotecas que fazem o trabalho pesado, a estratégia de testes, e um benchmark honesto.

Se você correr FastAPI em produção, que item dessa lista de "envolve o framework" você trata como inegociável?

P.S. Código: https://github.com/bilouro/FastAPIProject

P.S. Novo post tech toda a quarta-feira.

#FastAPI #Python #Engenharia