A API Atletas é um projeto exemplo desenvolvido com FastAPI, SQLAlchemy e Alembic para controle de migrações, usando PostgreSQL rodando em contêiner Docker. O objetivo deste repositório é servir como referência prática e mão na massa para desenvolvedores que querem aprender a construir APIs robustas em Python, com camadas claras de persistência, versionamento do schema e deploy local via Docker.
Principais elementos do projeto:
- FastAPI para criação dos endpoints REST.
- SQLAlchemy como ORM para modelagem e manipulação do banco.
- Alembic para controle de migrações e versionamento do schema.
- PostgreSQL em contêiner Docker para rápido setup do ambiente.
- Pydantic para validação e tipagem forte das requisições e respostas.
A API Atletas oferece as operações e recursos essenciais para gerenciar dados de atletas de forma segura e prática:
POST /atletas/— Criar um novo atleta.
Payload exemplo:{ "nome": "Thiago", "cpf": "123456789-13", "idade": 25, "peso": 75.5, "altura": 1.85, "sexo": "M", "centros_treinamento_id": "89afe3de-89a7-43c4-99f9-8339638c4cd2", "categorias_id": "5b1ef54e-6f08-4607-9834-41076af3a847" }
GET /atletas/ — Listar atletas com paginação ?offset=1&limit=20.
GET /atletas?nome=Arthur&cpf=123456789-13 - Recuperar Atleta por nome e cpf
GET /atletas/{id} — Recuperar um atleta por ID.
PATCH /atletas/{id} — Atualizar dados de um atleta.
DELETE /atletas/{id} — Remover um atleta.
Modelos de entrada e saída definidos com Pydantic (schemas) para garantir:
Tipos corretos (str, int, enums)
Campos obrigatórios e opcionais
Regras de validação (ex.: idade >= 0)
SQLAlchemy como ORM.
Alembic para migrações versionadas do schema.
Documentação automática via Swagger UI (/docs).
Execução local simplificada com Docker Compose (Postgres em container).
Configurações via variáveis de ambiente (URL do DB, modo debug, etc).
Logs estruturados (nível configurável).
Testes básicos (unitários e/ou de integração) para endpoints críticos.
Tratamento padronizado de erros com respostas HTTP apropriadas (400/404/422/500).
Separação clara entre:
- routers / endpoints
- schemas (Pydantic)
- models (SQLAlchemy)
- services / repositories (lógica de domínio e acesso ao DB)
- core / config (configurações e inicialização do app)
A API Atletas segue uma arquitetura modular, organizada para garantir clareza, manutenção simples e facilidade de expansão. A estrutura típica do projeto é a seguinte:
project/
│
├── app/
│ ├── contrib/ # Configurações gerais, conexão com o banco, variáveis de ambiente
│ ├── models/ # Modelos SQLAlchemy (representação das tabelas)
│ ├── schemas/ # Modelos Pydantic (entrada e saída das requisições)
│ ├── routes/ # Endpoints organizados por domínio
│ ├── configs/ # Camada de acesso ao banco usando SQLAlchemy
│ └── main.py # Ponto de entrada do FastAPI
│
├── alembic/ # Diretório com migrações do banco
├── alembic.ini # Configuração do Alembic
├── docker-compose.yml # Subida do ambiente com PostgreSQL
├── pyproject.toml # Dependências do projeto
└── README.md
Define os endpoints HTTP. Cada rota é responsável apenas por:
- receber requisições
- delegar processamento aos services
- retornar respostas formatadas
Modelos Pydantic utilizados para:
- validar dados de entrada
- padronizar respostas
- garantir tipagem forte
Modelos SQLAlchemy que representam as tabelas do banco.
- definem colunas
- constraints
- relação entre entidades
Camada dedicada para interagir com o banco via SQLAlchemy.
- queries
- commits e rollbacks
- buscas filtradas e paginação