devnotes-api é uma API REST simples criada para permitir que desenvolvedores salvem anotações técnicas pessoais, como snippets, comandos, referências e pequenos lembretes de estudo.
A ideia do projeto é demonstrar uma estrutura backend organizada, com separação clara de responsabilidades e boas práticas comuns em APIs Node.js.
O projeto utiliza uma arquitetura em camadas simples para manter o código fácil de entender:
routesdefinem os endpoints da APIcontrollerslidam com requisições e respostas HTTPservicescontêm a lógica da aplicaçãomodelsdefinem a estrutura dos dados no MongoDB
- Node.js
- TypeScript
- Express
- MongoDB com Mongoose
- Docker
- Jest
- Swagger
- Certifique-se de ter Node.js 20+ instalado.
- Copie o arquivo
.env.examplepara.env. - Instale as dependências:
npm installPadrão de commits sugerido:
- feat: nova funcionalidade
- fix: correção de bug
- docs: alterações na documentação
- test: adição ou ajuste de testes
- chore: tarefas de manutenção
- Inicie um MongoDB local ou use Docker.
- Ajuste
MONGODB_URIno arquivo.env, se necessário. - Inicie a API:
npm run devA aplicação ficará disponível em http://localhost:3000.
docker compose up --buildIsso sobe:
- API em
http://localhost:3000 - MongoDB em
mongodb://localhost:27017
A documentação interativa da API fica em:
http://localhost:3000/docs
Todas as rotas estão descritas em português, com exemplos de payload e respostas.
npm testGET /health
curl http://localhost:3000/healthPOST /notes
curl -X POST http://localhost:3000/notes \
-H "Content-Type: application/json" \
-d '{
"title": "Resumo sobre Express",
"content": "Middlewares ajudam a organizar a aplicacao.",
"tags": ["express", "node"]
}'GET /notes
curl http://localhost:3000/notesGET /notes/:id
curl http://localhost:3000/notes/<note-id>PUT /notes/:id
curl -X PUT http://localhost:3000/notes/<note-id> \
-H "Content-Type: application/json" \
-d '{
"title": "Titulo atualizado",
"content": "Conteudo atualizado",
"tags": ["atualizado", "backend"]
}'DELETE /notes/:id
curl -X DELETE http://localhost:3000/notes/<note-id>Cada nota possui:
titlecontenttagscreatedAt