MODULO 2.5

🎬 Exemplo Real: Python FastAPI Backend

Veja como criar um CLAUDE.md completo para um backend Python com FastAPI, SQLAlchemy e uv. Compare as abordagens entre o ecossistema Python e JavaScript.

6
Topicos
35
Minutos
Interm.
Nivel
Pratico
Tipo
1

🏗️ Project Overview do Backend

Para um backend Python com FastAPI, o overview deve focar na API e seus consumidores. Diferente de um frontend, o contexto aqui e sobre endpoints, integracao e processamento de dados.

💡 Exemplo Completo

# Project Overview

DataPipe is a REST API backend for a data analytics platform.

It handles user authentication, data ingestion from multiple

sources (CSV, APIs, databases), transformation pipelines,

and serves processed data to a React frontend and mobile app.

The API serves ~2k requests/minute and processes batch jobs

of up to 10GB via background workers (Celery). All endpoints

are versioned under /api/v1/.

Dica Pratica

Mencione os consumidores da API (frontend React, mobile app) para que o Claude entenda o contexto completo. Isso influencia decisoes como formato de resposta e versionamento de endpoints.

2

⚙️ Tech Stack com FastAPI e SQLAlchemy

A stack Python tem suas particularidades. E essencial especificar se voce usa SQLAlchemy 1.x ou 2.x, se usa Pydantic v1 ou v2, e qual gerenciador de pacotes (pip, poetry ou uv).

💡 Exemplo Completo

# Tech Stack

- Language: Python 3.12

- Framework: FastAPI 0.109+

- ORM: SQLAlchemy 2.0 (async, new-style mapped_column)

- Validation: Pydantic v2 (model_validator, not validator)

- Database: PostgreSQL 16 + Redis 7 (caching/sessions)

- Migrations: Alembic

- Task Queue: Celery with Redis broker

- Auth: python-jose for JWT + passlib for password hashing

- Package Manager: uv (NOT pip, NOT poetry)

- Linting: ruff (replaces flake8, isort, black)

- Testing: pytest + pytest-asyncio + httpx (async test client)

- Containerization: Docker + docker-compose for local dev

- Deploy: AWS ECS with ECR

Dica Pratica

O detalhe "SQLAlchemy 2.0 (async, new-style mapped_column)" e crucial. O Claude frequentemente gera codigo SQLAlchemy 1.x se nao for instruido. O mesmo vale para "Pydantic v2 (model_validator, not validator)" - as APIs mudaram significativamente entre v1 e v2.

3

🖥️ Comandos com uv

O uv e o gerenciador de pacotes Python moderno e ultra-rapido. Se voce usa uv, e essencial documentar os comandos porque o Claude por padrao sugere pip ou poetry.

💡 Exemplo Completo

# Commands

- `uv sync` - install/sync all dependencies from pyproject.toml

- `uv run uvicorn app.main:app --reload` - start dev server

- `uv run pytest` - run all tests

- `uv run pytest tests/path/to/test_file.py::test_name` - run single test

- `uv run pytest -x -v` - run tests, stop on first failure

- `uv run ruff check .` - lint check

- `uv run ruff format .` - auto-format code

- `uv run alembic upgrade head` - apply all migrations

- `uv run alembic revision --autogenerate -m "description"` - create migration

- `uv run alembic downgrade -1` - rollback last migration

- `docker-compose up -d` - start local PostgreSQL + Redis

- `uv add package-name` - add a new dependency

Dica Pratica

Note que todos os comandos usam uv run como prefixo. Sem essa documentacao, o Claude usaria python -m pytest ou pip install e quebraria o ambiente virtual.

4

📐 Convencoes do FastAPI

As convencoes de um backend FastAPI incluem estrutura de rotas, schemas Pydantic, modelos SQLAlchemy e padroes de tratamento de erros. Cada uma impacta diretamente a qualidade do codigo gerado.

💡 Exemplo Completo

# Code Conventions

## API Structure

- Routers in app/api/v1/endpoints/ (one file per resource)

- Schemas (Pydantic) in app/schemas/ (Create, Update, Response)

- Models (SQLAlchemy) in app/models/ (one class per file)

- Business logic in app/services/ (never in routers)

- Database queries in app/crud/ (repository pattern)

## Pydantic v2 Patterns

- Use model_validator instead of validator decorator

- Use model_config = ConfigDict(...) instead of class Config

- Schema names: UserCreate, UserUpdate, UserResponse

## SQLAlchemy 2.0 Patterns

- Use Mapped[type] and mapped_column() (new style)

- Async sessions via async_sessionmaker

- Relationships with lazy="selectin" for async compat

## General

- All functions with type hints (params + return)

- Docstrings in Google format for all public functions

- snake_case everywhere (PEP 8)

Dica Pratica

A regra "Business logic in app/services/ (never in routers)" e fundamental. Sem ela, o Claude tende a colocar toda a logica direto nas rotas, criando controllers gordos e dificeis de testar.

5

🚫 O que Evitar no FastAPI

O ecossistema Python tem armadilhas especificas que o Claude pode cair, especialmente na diferenca entre APIs sincronas e assincronas, e entre versoes antigas e novas de SQLAlchemy e Pydantic.

💡 Exemplo Completo

# Things To Avoid

- NEVER use SQLAlchemy 1.x patterns (Column(), declarative_base())

  → Use Mapped[], mapped_column(), DeclarativeBase

- NEVER use Pydantic v1 patterns (validator, class Config)

  → Use model_validator, ConfigDict

- DO NOT use sync database sessions (use async throughout)

- NEVER use pip install or poetry → always use uv

- DO NOT put business logic in route handlers

  → Create a service function in app/services/

- NEVER use print() for logging → use structlog

- DO NOT use datetime.utcnow() → use datetime.now(UTC)

- AVOID raw SQL queries → use SQLAlchemy ORM

- NEVER modify existing Alembic migrations

- DO NOT use wildcard imports (from module import *)

Dica Pratica

A regra "DO NOT use datetime.utcnow()" e um classico. Essa funcao esta deprecated no Python 3.12, mas o Claude ainda a sugere por habito. Incluir a alternativa correta (datetime.now(UTC)) e essencial.

6

⚖️ Comparando com Next.js

Comparar os dois exemplos (Next.js e FastAPI) revela padroes universais que se aplicam a qualquer CLAUDE.md, independente da linguagem ou framework.

💡 Conceito Principal

Apesar das diferencas tecnologicas, a estrutura do CLAUDE.md e sempre a mesma. As 6 secoes funcionam para qualquer stack.

Aspecto Next.js SaaS FastAPI Backend
Pkg Managerpnpmuv
ORMPrismaSQLAlchemy 2.0
ValidationTypeScript + ZodPydantic v2
TestingVitest + Playwrightpytest + httpx
LintingESLintruff
MigrationsPrisma MigrateAlembic
  • A estrutura das 6 secoes funciona para qualquer linguagem
  • O nivel de detalhe deve ser o mesmo - especifico e sem ambiguidade
  • As secoes "Things To Avoid" sao as mais especificas por stack

Dica Pratica

Se voce trabalha com multiplas stacks, crie um CLAUDE.md template para cada uma. Assim, quando iniciar um novo projeto, so precisa personalizar o overview e os comandos. As convencoes e anti-patterns podem ser reutilizados.

📋 Resumo do Modulo

Overview focado em API - Descreva endpoints, consumidores e escala do backend
Stack Python moderna - FastAPI, SQLAlchemy 2.0 async, Pydantic v2, uv
Comandos com uv - Sempre prefixar com uv run, documentar teste individual
Convencoes FastAPI - Separacao router/service/crud, schemas Pydantic v2, modelos async
Anti-patterns Python - No SQLAlchemy 1.x, no Pydantic v1, no pip, no print()
Padroes universais - A estrutura de 6 secoes funciona para qualquer stack

Proximo Modulo:

2.6 - O Comando /init