Após trabalhar alguns anos com Java no backend decidi sair da zona de conforto e conhecer o NodeJS. Para um projeto de um cliente decidi utilizá-lo com o MongoDB. E a melhor forma de aprender e se propor a ensinar.
Um dos posts mais visualizados do blog é Criando e consumindo um serviço REST com Java. Sabendo disso, decidi escrever este para mostrar o processo de criação com NodeJS.
Iniciando o projeto
Crie uma pasta chamada rest-nodejs, acesse ela via terminal e execute o comando abaixo para criar o package.json.
npm init -y
Agora iremos adicionar 2 dependências ao nosso projeto
yarn add express body-parser
A primeira delas é o express que irá nos ajudar na tratativa de rotas e requests. A segunda é o body-parser que interpreta o body e parâmetros enviados via URL.
Criando crudController com método POST
Agora crie um diretório chamado src/app/controller. Dentro dessa pasta crie uma arquivo chamado crudController.js
const express = require('express'); //Importação do express
const router = express.Router(); //Variável de rota
var pessoas = []; //Array estático de pessoas
var idPessoa = 0; //Variável que irá controlar os Ids gerados
// Rota de inserção
router.post('/', (req, res) => {
const pessoa = { id: ++idPessoa, nome: req.body.nome };
pessoas.push(pessoa);
return res.status(201).send({ pessoas });
});
//Exportação do controller. Variável 'app' será passado por parâmetro
module.exports = app => app.use('/crud', router);
Criando index.js
Ótimo! agora precisamos criar o arquivo index.js que vai ficar dentro de src.
const express = require('express'); //Importação do express
const bodyParser = require('body-parser') //Importação do body-parser
const app = express(); //Variável app
app.use(bodyParser.json()); //Define que a aplicação irá receber objetos do tipo json
app.use(bodyParser.urlencoded({ extended: false })); //Utilizado para entender parâmetros via URL
require('./app/controller/crudController')(app); //Importação do controller criado passando a váriavel app adiante
app.listen(3000); //Porta que a aplicação ficará ouvindo
Veja como ficou a estrutura de pastas do projeto:
Testando inclusão (POST)
Inicialize o arquivo src/index.js
node src/index.js
Feito esse procedimento podemos testar a inserção de acordo com o Endpoint que foi criado. Utilize a ferramenta de sua preferência, eu utilizo o Postman.
Método: POST
URL: http://localhost:3000/crud
Body: { "nome": "Ronaldo" }
Após três persistências, veja o resultado:
{
"pessoas": [
{
"id": 1,
"nome": "Ronaldo"
},
{
"id": 2,
"nome": "Rivaldo"
},
{
"id": 3,
"nome": "Cafu"
}
]
}
Criando método (PUT)
Vamos para o Endpoint de edição que também será adicionado no crudController.
// Rota de edição
router.put('/:id', (req, res) => {
pessoas = pessoas.map(pessoa => {
if (pessoa.id == req.params.id) pessoa.nome = req.body.nome;
return pessoa;
});
return res.status(200).send({ pessoas });
});
Testando alteração (PUT)
Vamos substituir o Ronaldo pelo Romário.
Método: PUT
URL: http://localhost:3000/crud/1
Body: { "nome": "Romário" }
Agora como resultado temos:
{
"pessoas": [
{
"id": 1,
"nome": "Romário"
},
{
"id": 2,
"nome": "Rivaldo"
},
{
"id": 3,
"nome": "Cafu"
}
]
}
Criando método (DELETE)
// Rota de exclusão
router.delete('/:id', (req, res) => {
pessoas = pessoas.filter(pessoa => pessoa.id != req.params.id);
return res.status(200).send({ pessoas });
});
Testando exclusão (DELETE)
Para remover um jogador é simples:
Método: DELETE
URL: http://localhost:3000/crud/3
Nova lista:
{
"pessoas": [
{
"id": 1,
"nome": "Romário"
},
{
"id": 2,
"nome": "Rivaldo"
}
]
}
Criando método listarTodos(GET) e buscarPorId(GET)
Bacana! E como fazer para listar tudo e por id?
// Rota para buscar todos
router.get('/', (req, res) => res.status(200).send({ pessoas }));
// Rota buscar por id
router.get('/:id', (req, res) => {
const pessoa = pessoas.find(pessoa => pessoa.id == req.params.id);
return res.status(200).send({ pessoa });
});
Testando método listarTodos(GET) e buscarPorId(GET)
Método: GET
URL: http://localhost:3000/crud
{
"pessoas": [
{
"id": 1,
"nome": "Romário"
},
{
"id": 2,
"nome": "Rivaldo"
}
]
}
Método: GET
URL: http://localhost:3000/crud/2
{
"pessoa": {
"id": 2,
"nome": "Rivaldo"
}
}
Em um próximo post pretendo fazer um comparativo entre o serviço criado em Java com o NodeJS. Disponibilizei no GitHub o código fonte junto com a collection do Postman. Até a próxima! 😀
