Minimal REST API built with TypeScript and Fastify, following a Specification-Driven Development approach.
Uma API REST minimalista desenvolvida com Node.js, TypeScript e Fastify para gerenciamento de equipes e pilotos da Fórmula 1.
Este projeto foi desenvolvido durante o bootcamp Sem Parar Corpay – Back-end do Zero à Prática da Digital Innovation One (DIO).
O objetivo do projeto é disponibilizar uma API REST simples para consulta de equipes e pilotos da Fórmula 1.
A aplicação segue o conceito de Minimal API, mantendo toda a implementação concentrada em um único arquivo (server.ts), sem utilização de Controllers, Services ou outras camadas.
Além da implementação da API, o projeto foi desenvolvido seguindo uma especificação técnica (APP_SPEC.md), simulando um fluxo utilizado em projetos reais de desenvolvimento de software.
- ✅ Listar equipes
- ✅ Listar pilotos
- ✅ Buscar piloto por ID
- ✅ Filtrar pilotos por equipe
- ✅ Filtrar pilotos por nacionalidade
- ✅ Combinar filtros (
team+country) - ✅ Tratamento de erros HTTP
- ✅ CORS habilitado
- ✅ Dados armazenados em memória
- Node.js
- TypeScript
- Fastify
- @fastify/cors
- tsx
- tsup
FORMULA1-API
│
├── src/
│ └── server.ts
│
├── docs/
│ └── images/
│ ├── get-teams.png
│ ├── get-drivers.png
│ └── get-drivers-filter.png
│
├── APP_SPEC.md
├── README.md
├── package.json
├── tsconfig.json
└── .gitignore
Clone o repositório:
git clone https://github.com/MilenaMP/node-formula1-api.gitAcesse a pasta do projeto:
cd formula1-apiInstale as dependências:
npm installAntes de executar a aplicação, crie um arquivo .env na raiz do projeto e adicione a seguinte variável de ambiente:
PORT=3333Observação: a aplicação utiliza essa variável para definir a porta em que o servidor será iniciado.
npm run start:devnpm run start:watchnpm run buildnpm run start:distApós iniciar a aplicação, a API estará disponível em:
http://localhost:3333
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /teams | Lista todas as equipes |
| GET | /drivers | Lista todos os pilotos |
| GET | /drivers/:id | Busca um piloto pelo ID |
A rota /drivers suporta os seguintes filtros:
| Query | Exemplo |
|---|---|
| team | /drivers?team=Mercedes |
| country | /drivers?country=British |
| team + country | /drivers?team=Mercedes&country=British |
Os filtros são case-insensitive.
Exemplo de resposta do endpoint GET /teams.
Exemplo de resposta do endpoint GET /drivers.
Exemplo utilizando os filtros team e country.
{
id: number;
name: string;
number: number;
nationality: string;
teamId: number;
championships: number;}{
id: number;
name: string;
country: string;
engine: string;}404 Not Found
{
"message": "Driver not found."
}400 Bad Request
{
"message": "Invalid filter."
}A especificação técnica completa utilizada durante o desenvolvimento encontra-se em:
- 📘 APP_SPEC.md
Este documento define:
- Escopo da aplicação
- Modelagem dos dados
- Padrões de código
- Endpoints
- Tratamento de erros
- Convenções da API
- Guardrails do projeto
Este projeto foi desenvolvido seguindo uma abordagem de Specification-Driven Development, na qual toda a implementação foi guiada por uma especificação técnica previamente definida.
Além da implementação da API, foram documentados:
- arquitetura da aplicação;
- convenções de código;
- padrões REST;
- contratos dos endpoints;
- modelo de dados;
- regras de implementação.
Próximas melhorias:
- CRUD completo
- Persistência com PostgreSQL
- Docker
- Swagger/OpenAPI
- Testes automatizados
Milena
Computer Science Student
Front-End Developer
Atualmente estudando desenvolvimento Back-end com Node.js e TypeScript.
Projeto desenvolvido para fins educacionais durante o bootcamp Sem Parar Corpay – Back-end do Zero à Prática da DIO.


