Apresentando: Notes API - Uma API REST modular e minimalista em Node.js
Olá a todos,
Gostaria de compartilhar com a comunidade o projeto Notes API, uma implementação simples e modular de uma API REST para gerenciamento de notas (CRUD), desenvolvida utilizando Node.js e Express.js.
O foco principal deste projeto é demonstrar uma estrutura de código organizada e escalável em pequenos contextos, seguindo boas práticas de arquitetura. Utilizamos uma divisão clara de responsabilidades entre Controllers, Services, Middlewares e uma camada de Database, garantindo que cada parte do sistema tenha uma única função bem definida.
Para manter o projeto leve e de fácil execução, escolhemos o SQLite como banco de dados, ideal para projetos que priorizam a simplicidade de setup e a portabilidade. Além disso, toda a validação de dados de entrada é feita de forma robusta e declarativa com a biblioteca Zod.
Estrutura e Boas Práticas Adotadas
A arquitetura do projeto foi desenhada para ser limpa e intuitiva:
- Validação rigorosa com Zod antes de qualquer operação de negócio.
- Design RESTful utilizando corretamente os verbos HTTP (GET, POST, PUT, PATCH, DELETE) sobre o recurso
/notes. - Tratamento de erros customizado, garantindo que o cliente sempre receba um retorno claro, com códigos de status HTTP e mensagens padronizadas.
- Cobertura de testes utilizando Mocha e Supertest, essenciais para garantir a funcionalidade da API.
Como Instalar e Rodar
Para quem tiver interesse em explorar a estrutura ou utilizá-la como base para um projeto pessoal:
Pré-requisitos: Node.js (versão 18+)
- Clone o projeto:
git clone https://github.com/rickferrdev/notes-api cd notes-api - Instale as dependências:
npm install - Inicie a API em modo de desenvolvimento:
npm run watch
Exemplo de Uso (CRUD Básico)
Com a API rodando em http://localhost:8080, você pode interagir com ela usando qualquer cliente HTTP (como Insomnia, Postman ou curl):
1. Criar uma Nova Nota (POST)
curl -X POST http://localhost:8080/notes \
-H "Content-Type: application/json" \
-d '{"title": "Ideias para o TabNews", "content": "Estruturar o próximo post sobre testes unitários."}'
2. Obter a Nota Recém-Criada (GET)
(Assumindo que o ID retornado na criação foi 1)
curl http://localhost:8080/notes/1
3. Atualizar Parcialmente (PATCH)
curl -X PATCH http://localhost:8080/notes/1 \
-H "Content-Type: application/json" \
-d '{"title": "Ideias para o TabNews (Revisado)"}'
Sinta-se à vontade para analisar a estrutura, sugerir melhorias ou utilizá-la em seus próprios aprendizados.
Obrigado pela leitura e por prestigiarem o projeto!