Início Profile Projeto
Avatar de

Livio Lopes de Alvarenga

API RESTful com Node.js

  • NodeJs
  • JavaScript
  • Insomnia

API REST em Node.js puro para CRUD de tarefas

SobreVitrine DevTecnologiasInstalaçõesFuncionalidadesAutorLicenç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 task
  • title - Título da task
  • description - Descrição detalhada da task
  • completed_at - Data de quando a task foi concluída. O valor inicial deve ser null
  • 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 campos title e description por meio do body da requisição. Ao criar uma task, os campos: id, created_at, updated_at e completed_at devem ser preenchidos automaticamente, conforme a orientação das propriedades acima.

POST

  • 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 pelo title e description

GET

  • PUT - /tasks/:id Deve ser possível atualizar uma task pelo id. No body da requisição, deve receber somente o title e/ou description para serem atualizados. Se for enviado somente o title, significa que o description não pode ser atualizado e vice-versa. Antes de realizar a atualização, deve ser feito uma validação se o id pertence a uma task salva no banco de dados.

PUT

  • DELETE - /tasks/:id Deve ser possível remover uma task pelo id. Antes de realizar a remoção, deve ser feito uma validação se o id pertence a uma task salva no banco de dados.

DELETE

  • 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.

PATCH

  • Validar se as propriedades title e description das rotas POST e PUT estão presentes no body da requisição.

  • Nas rotas que recebem o /:id, além de validar se o id 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

 

issue site API-NodeJs-Tasks total amount of programming languages used in the project most used language in the projects repository size

 


 

📺 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

 

Node.js badge JavaScript badge Insomnia badge vscode download code formatter prettier


 

⚙️ 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

Insomnia

 


 

🦸 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.

 

portifólio livio alvarenga perfil linkedin livio alvarenga perfil twitter livio alvarenga perfil instagram livio alvarenga perfil facebook livio alvarenga perfil youtube livio alvarenga

perfil vitrinedev livio alvarenga


 

📝 Licença

Este projeto é MIT licensed.

#CompartilheConhecimento