aulify · Mini-Projecto
UC UC02831 · T. Desenv. Software, T. Inform. Gestão
Versão · Aluno
Mini-Projecto · API REST com BD
Construir endpoint que serve dados de uma BD real
Contexto
Cada par/trio constrói uma API REST em FastAPI com BD PostgreSQL (ou SQLite para simplificar), usando SQLAlchemy + Alembic. Aplica tudo o que foi aprendido: modelos, queries, migrações, pool, segurança.
Requisitos
Funcionais
- Domínio à escolha (validar com professor) — mín. 4 entidades, 1 relação N:M.
- API REST com pelo menos 12 endpoints (CRUD em 3 recursos + listar/filtrar).
- Modelos SQLAlchemy com restrições e relations.
- Migrações Alembic versionadas.
- Prepared statements em qualquer SQL manual (não há, com ORM).
- Autenticação simples (Bearer token).
- 15+ testes com pytest + httpx.
Não-funcionais
- Documentação OpenAPI (FastAPI gera automaticamente).
- README com instruções.
- Git com commits descritivos.
- Variáveis de ambiente para configuração.
Fases
Fase 1 · 1.5h
Setup e modelos
- Projecto FastAPI + SQLAlchemy.
- Modelos das 4 entidades.
- Primeira migração Alembic.
Estrutura inicial + 1ª migração.
Fase 2 · 2h
Repository pattern
- Repository por entidade.
- CRUD básico.
repositories/ + testes unitários.
Fase 3 · 2h
Endpoints REST
- 12+ endpoints (GET, POST, PUT, DELETE).
- Validação com Pydantic.
- Códigos de status correctos.
API funcional, testada com curl/Postman.
Fase 4 · 1.5h
Autenticação
- Endpoint
/loginque devolve token. - Middleware que valida token em endpoints protegidos.
- Pelo menos 2 níveis (público / autenticado / admin).
Auth funcional.
Fase 5 · 2h
Testes
- pytest + httpx + fixtures de BD limpa.
- 15+ testes cobrindo casos felizes e edge cases.
tests/ com cov ≥ 70%.
Fase 6 · 1h
Polish
- README, .env.example, Dockerfile (bónus).
- Apresentação 5 min.
Repo completo + demo.
Critérios de avaliação
| Item | Peso |
|---|---|
| Modelos + migrações | 15% |
| Endpoints REST | 20% |
| Repository pattern | 10% |
| Autenticação | 15% |
| Validação Pydantic | 10% |
| Testes | 20% |
| Documentação + Git | 10% |
Reflexão
Em meia página: que dificuldade foi maior — modelos, queries ou autenticação? O que mudarias agora que terminaste? Como esta API se ligaria a um frontend React/Vue?