API RESTful com Node.js
API REST em Node.js puro para CRUD de tarefas
Sobre • Vitrine Dev • Tecnologias • Instalações • Funcionalidades • Autor • Licença
💻 Sobre o projeto
🚀 Desenvolver uma API REST para realizar o CRUD de suas tasks (tarefas). Usei Node.js focado nos fundamentos da tecnologia, sem frameworks ou bibliotecas externas. Aprenderemos sobre módulos internos do Node.js como HTTP, Crypto e File System e sobre fundamentos HTTP como requests, respondes, headers, status code, route e query parameters, etc. Também daremos profundidade em Streams no Node.js e como aplica-las para realizarmos operações assíncronas e parciais em nosso back-end.
disclaimer: Sei que esta não é a melhor forma de criar uma API-REST, mas gostaria de ver como uma API roda por debaixo do capo. Queria ver o conceito de Streams no Node.JS, vendo Buffers e chunk rodando ao vivo e a cores, rs e foi ótimo para aprender sobre o assunto. Olharei para o Express com outros olhos agora.
Rotas e regras de negócio
Estrutura (propriedades) que uma task deve ter:
id
- Identificador único de cada tasktitle
- Título da taskdescription
- Descrição detalhada da taskcompleted_at
- Data de quando a task foi concluída. O valor inicial deve sernull
created_at
- Data de quando a task foi criada.updated_at
- Deve ser sempre alterado para a data de quando a task foi atualizada.
Rotas:
POST - /tasks
Deve ser possível criar uma task no banco de dados, enviando os campostitle
edescription
por meio dobody
da requisição. Ao criar uma task, os campos:id
,created_at
,updated_at
ecompleted_at
devem ser preenchidos automaticamente, conforme a orientação das propriedades acima.
GET - /tasks
Deve ser possível listar todas as tasks salvas no banco de dados. Também deve ser possível realizar uma busca, filtrando as tasks pelotitle
edescription
PUT - /tasks/:id
Deve ser possível atualizar uma task peloid
. Nobody
da requisição, deve receber somente otitle
e/oudescription
para serem atualizados. Se for enviado somente otitle
, significa que odescription
não pode ser atualizado e vice-versa. Antes de realizar a atualização, deve ser feito uma validação se oid
pertence a uma task salva no banco de dados.
DELETE - /tasks/:id
Deve ser possível remover uma task peloid
. Antes de realizar a remoção, deve ser feito uma validação se oid
pertence a uma task salva no banco de dados.
PATCH - /tasks/:id/complete
Deve ser possível marcar a task como completa ou não. Isso significa que se a task estiver concluída, deve voltar ao seu estado “normal”.
Antes da alteração, deve ser feito uma validação se o
id
pertence a uma task salva no banco de dados.
Validar se as propriedades
title
edescription
das rotasPOST
ePUT
estão presentes nobody
da requisição.Nas rotas que recebem o
/:id
, além de validar se oid
existe no banco de dados, retornar a requisição com uma mensagem informando que o registro não existe.
Criação via CSV com Stream:
Vamos utilizar a lib csv-parse, utilizando o exemplo de iterador async.
Crie um arquivo a parte para realizar a leitura do arquivo CSV.
Deve ser feito a leitura do CSV e para cada linha, realize uma requisição para a rota POST - /tasks
, passando os campos necessários.
Formato do CSV:
title,description
Task 01,Descrição da Task 01
📺 Vitrine Dev
🪧 Vitrine.Dev | |
---|---|
✨ Nome | API RESTful com Node.js |
🏷️ Tecnologias | NodeJs, JavaScript, Insomnia |
🛠 Tecnologias
As seguintes ferramentas foram usadas na construção do projeto
⚙️ Instalações
Criando projeto NodeJs
# Criando projeto NodeJs com o npm init -y (-y para não precisar responder as perguntas)
npm init -y
# Adicionando o type module para o NodeJs reconhecer o import/export em vez do require do CommonJS
# Adicionar no arquivo package.json no campo "type"
"type": "module",
// Adicionar no arquivo package.json no campo "scripts"
"scripts": {
"dev": "node --watch src/server.js", // start server
"csv": "node streams/import-csv.js" // import csv file with tasks
},
Instalando dependências
# Instalando o csv-parse para realizar a leitura do arquivo CSV
npm install csv-parse
⚙️ Funcionalidades
- Criação de uma task
- Listagem de todas as tasks
- Atualização de uma task pelo
id
- Remover uma task pelo
id
- Marcar pelo
id
uma task como completa - Importação de tasks em massa por um arquivo CSV
🧭 Rodando a aplicação web (Modo desenvolvimento)
# Clone este repositório
git clone https://github.com/livioalvarenga/API-NodeJs-Tasks.git
# Acesse a pasta do projeto no seu terminal/cmd
cd API-NodeJs-Tasks
# Instale as dependências
npm install
# Execute a aplicação em modo de desenvolvimento
npm run dev
# A aplicação será aberta na porta:3333 - acesse http://localhost:3333
npm run csv
# Importar arquivo CSV com tasks (open db.json to see the import result)
🧭 Rodando a aplicação server (Modo desenvolvimento)
npm run dev
# A aplicação será aberta na porta:3333 - acesse http://0.0.0.0:3333/
Importando arquivo CSV com tarefas
npm run dev # start server
npm run csv # import csv file with tasks
Testando requests com Insomnia
npm run dev # start server
Importar o arquivo
Insomnia.json
no Insomnia para testar as requests
🦸 Autor
Olá, eu sou Livio Alvarenga, Engenheiro de Produção | Dev Back-end e Front-end. Sou aficcionado por tecnologia, programação, processos e planejamento. Uni todas essas paixões em uma só profissão. Dúvidas, sugestões e críticas são super bem vindas. Seguem meus contatos.
📝 Licença
Este projeto é MIT licensed.