Desenvolvendo APIs com Node.js + Express + MongoDB

Se você, assim como eu, está entrando em um novo mundo de desenvolvimento web baseado em javascript, este tutorial é feito pra você. Desenvolver APIs para serem consumidas pelos frameworks criados toda semana se torna essencial para entender como as coisas funcionam nesse novo mundo.

Neste tutorial você aprenderá a desenvolver uma simples API que gerencia uma lista de usuários.

Começando com as ferramentas necessárias:

1ª parte — Preparando o Ambiente

No console use o comando:

npm install express-generator -g

Isto irá instalar o gerador express e facilitará nosso serviço baixando grande parte das dependências para o projeto.

Após isso, escolha uma pasta onde será posicionada a pasta do projeto e use o comando:

express tutorial

Alguns arquivos serão gerados na pasta tutorial e instruções de como se instalar as dependencias e rodar o aplicativo.

cd tutorial && npm install
npm start

Após isso, todos os arquivos necessários serão instalados.

Edite o arquivo package.json localizado na raiz do projeto, para adicionar o resto das dependências.

E execute:

npm install

Uma dica para não ter que usar o comando npm start pode-se instalar um pacote chamado nodemon que reinicia o servidor a cada alteração do js. Para se instalar:

npm install -g nodemon

E para se utilizar:

nodemon

2ª Parte — Desenvolvendo a API

Com tudo instalado, abra o arquivo app.js e analise como ele é estruturado, nós faremos pequenas mudanças nele adicionando os trechos:

var mongoose = require(‘mongoose’);
mongoose.Promise = global.Promise;
mongoose.connect(‘mongodb://localhost/usuarios’);

Isso irá adicionar as conexões ao MongoDB.

Agora montaremos nossos Model para criarmos os usuários em sí, crie a pasta na raiz chamada models e o arquivo Users.js com o seguinte código:

Isso irá criar um modelo de como seria o usuário para o sistema.

O próximo passo será criar um controller, que irá adicionar as funções que darão utilidade aos modelos, como as querys de consulta aos usuários.

Crie uma pasta na raíz chamada Controllers e crie o arquivo users.js com o seguinte código:

Para se explicar esse código, é necessário se analisar em partes:

Parte 1 - module.exports.findall

Faz uma busca cega e procura todos os registros do banco pela função .find() e retorna um json com todos os usuários via o comando res.json(users).

Exemplo de retorno pelo modo get/findall

Parte 2 - module.exports.save

Este módulo cria um novo registro ao banco, inicialmente cria-se um objeto com os valores setados vindos do post, salva-se o objeto pela função .save() e retorna o usuário criado pelo res.json(users).

Exemplo de retorno pelo modo post/save

Parte 3 - module.exports.find

Semelhante ao primeiro módulo findall, passa um parâmetro vindo da url /users/:id e busca nos registros pelo id no banco pelo método .find({_id : id}) e retorna o json pelo método res.json(users).

Exemplo de retorno pelo modo get/find

Parte 4 - module.exports.delete

Faz uma busca por id e deleta o registro encontrado pela função .findByIdAndRemove(id) e retorna o id removido pela função res.json({id : id});

Exemplo de retorno pelo método delete/delete

Parte 5 - module.exports.update

O módulo mais complexo que atualiza os registros, usa uma união de find + save para atualizar os campos. Inicia-se pela busca via .find({_id : id}), atualiza as informações confirmando se elas foram alteradas e salva as alterações pelo .save().

Exemplo de retorno por put/update

Com o controller criado, precisamos usar os métodos com nossas rotas, então abra o arquivo index.js na pasta routes e digite o código:

É necessário no início do arquivo importar algumas dependências e os arquivos anteriormente criados para serem utilizados.

Para se determinar uma rota utiliza-se a variável router.(o método que se deseja utlizar), na linha 7 o router.get(‘/api/users’, users.findall) determina que o método é o get e utiliza o módulo findall criado no controller para retornar o que se pede e assim por diante.

Para testar suas conexões envie requisições pelo postman para os link:

GET — localhost:3000/api/users

GET — localhost:3000/api/users/:id

POST — localhost:3000/api/users

PUT — localhost:3000/api/users/:id

DELETE — localhost:3000/api/users/:id

Finalizando

Com esse tutorial você conseguirá criar APIs simples com pouco código e bastante praticidade.

Agradeço a todos que leram e aceito comentários com dicas e sugestões para próximos posts.