REST API em Node.js e RethinkDB - fga-eps-mds/A-Disciplina-MDS-EPS GitHub Wiki
Histórico de Revisão
Data | Versão | Descrição | Revisor |
---|---|---|---|
26/05/2017 | 1.0 | Estrutura de tópicos | Vitor Borges |
29/05/2017 | 1.1 | Escrita dos tópicos | Vitor Borges e Thiago Moreira |
30/05/2017 | 1.2 | Revisão dos tópicos | Danilo Barros e Lucas Rufino |
30/05/2017 | 1.3 | Validação dos tópicos e refatoração final | Danilo Barros, Lucas Rufino, Thiago Moreira e Vitor Borges |
30/05/2017 | 1.4 | Configuração final do RethinkDB | Danilo Barros, Lucas Rufino, Thiago Moreira e Vitor Borges |
[TOC]
1. Introdução
2. Tecnologias
2.1. Node JS
2.2. RethinkDB
- Aplicações mobile e web colaborativas;
- Jogos multiplayer;
- Mercados em tempo real;
- Dispositivos conectados.
3. Instalação
3.1. Instalando o Node JS
Para a instalação da mais nova versão do Node utilize os seguintes comandos:
$ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
$ sudo apt-get install -y nodejs
Opcionalmente, installe o build-essencial
para utilizar addons nativos do npm:
$ sudo apt-get install -y build-essential
Com a instalação concluída, cheque se o npm e o Node foram instalados corretamente.
$ node --version
v7.10.0
$ npm --version
4.5.0
3.2. Instalando o RethinkDB
$ source /etc/lsb-release && echo "deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list
$ wget -qO- https://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install rethinkdb
Para verificar a correnta instalação do RethinkDB execute:
$ rethinkdb -v
rethinkdb 2.3.5~0trusty (GCC 4.8.2)
4. Configuração
$ mkdir myAPI
$ cd myAPI
Na pasta da aplicação, inicie um projeto Node.js com o comando npm e as configurações desejadas.
myApp-$ npm init
Após isso, deve-se inserir as informações referentes ao seu servidor. Ele pede o nome, versão, descrição, entry point, test command, git repository, palavras-chaves, autor e licença. No fim, ele pergunta se está tudo ok para criar o projeto. Se sim, digite yes
no terminal.
Com isso, será criado um arquivo chamado package.json
que é o coração da aplicação Node.js, pois nele definimos todas as dependências da API.
4.1. Configurando o Node JS
Após a criação do projeto, é recomendado instalar algumas depêndencias que melhoram a experiência da utilização do Node, facilitando em diversos aspectos, como por exemplo, simplificar a utilização de querys para requisições no banco.
As dependências recomendadas são:
Express: Poderoso gerenciador de rotas focado em alta performance, que simplifica requisições HTTP.
$ npm install express --save
Body-parser: Facilita a captura dos objetos que são passados ou recebidos na sua requisição HTTP.
$ npm install body-parser --save
Morgan: Gera logs de requisição para melhor acompanhamento das rotas.
$ npm install morgan --save
Nodemon: Recarrega automaticamente o seu servidor, poupando o trabalho de reiniciá-lo sempre que houver alguma modificação.
$ npm install nodemon --save
O comando --save
presente nestes comandos citados acima salva todas as dependências instaladas no package.json
, facilitando o compartilhamento do código posteriormente. Para um terceiro instalar essas dependências do projeto, basta digitar o comando:
$ npm install
4.1.1 Criando um servidor
Após os passos acima, você já é capaz de criar sua API. Mas para isso, é necessário criar o servidor para iniciar os procedimentos.
Devemos criar um arquivo na pasta raiz para rodar nossa aplicação. Neste exemplo usaremos o nome app.js
.
Inicialmente, é preciso importar as depêndencias que serão necessárias para rodar o servidor. A importação é feita com o método require
do Node.
var express = require('express')
var bodyParser = require('body-parser')
var morgan = require('morgan')
Após isso, devemos evocar a função para utilizar os objetos do express em si.
var app = express()
No fim, devemos subir o servidor utilizando nossa variável app
. Para isso, passamos a porta que o servidor vai escutar e uma função que vai ser chamada assim que o servidor estiver no ar, como é mostrada no código abaixo.
app.listen(3000, function() {
console.log('Servidor executando no endereço http://localhost:' + 3000)
})
Após isso, seu servidor estará pronto para ser utilizado.
Utilize o comando abaixo para rodar o seu servidor.
$ node app
4.2. Configurando o RethinkDB
Uma tecnologia auxiliar ao RethinkDB que nos permite criar models e facilita nas queries é o Thinky, o qual utilizamos para configurar a base de dados. Para instalar o Thinky, faça:
myAPI-$ npm install --save thinky
Com isso, crie uma pasta com o nome database
e configure o arquivo de banco de dados chamado index.js
.
//Path: myAPI/database/
var thinky = require('thinky')()
var { type, r } = thinky // importa 'type' para tipos de variáveis e 'r' como o próprio módulo do RethinkDB
async function init () {
try {
await thinky.dbReady()
return thinky
} catch (error) {
throw error
}
}
export { init, thinky, type, r }
Com a base de dados configurada, volte ao arquivo app.js
e adicione as linhas de configuração do banco de dados:
var express = require('express')
var bodyParser = require('body-parser')
var db = require('./database')
var morgan = require('morgan')
var app = express()
app.use(bodyParser.json({
limit: '5mb'
}))
db.init()
.then(db => {
app.listen(3000, () => {
console.log('Server listening on http://localhost:3000')
})
})
O próximo passo é criar uma model
para poder salvar no banco de dados. Para isso, crie uma pasta models
.
myAPI-$ mkdir models
Agora, crie uma model qualquer de teste, no caso, criaremos uma model User.js
.
var { thinky, type } = require('../database')
var User = thinky.createModel('Users', {
name: type.string(),
email: type.string()
})
export default User
Agora, basta criar uma api
e configura-la para disponibilizar os métodos de requisição e consumir a API REST. Para isso, crie a pasta api
e o arquivo index.js
.
myAPI-$ mkdir api
myAPI-$ touch api/index.js
myAPI-$ touch api/users.js
// index.js
var { Router } = require('express')
var userRouter = require('./users')
export default ({ db }) => {
let api = Router()
var users = userRouter({ db })
api.use('/users', users)
return api
}
Crie também o arquivo users.js
na pasta api
.
// users.js
var { Router } = require('express')
var User = require('../models/User')
export default ({ db }) => {
let router = Router()
/*
configuração para rotas do tipo users/:id para
utilizarem o id do User como parâmetro
*/
router.param('user', (req, resp, next, id) => {
req.userDocument = User.get(id)
next()
})
router.get('/', async (request, response) => {
try {
var result = await User.run() // executa a query de get all no bando de dados
response.json(result)
} catch (error) {
response.status(500).send(error)
}
})
return router
}
Agora, volte no arquivo app.js
e configure a rota para /api
.
var api = require('./api') // importe a pasta 'api'
[...]
db.init()
.then(db => {
app.use('/api', api({ db })) // configure as rotas para começarem com '/api'
app.listen(3000, () => {
console.log('Server listening on http://localhost:3000')
})
})
Agora, para executar a api
basta executar os comandos rethinkdb
e nodemon app.js
na pasta myAPI
e acessar a rota http://localhost:3000/api/users
para acessar a rota e verificar a resposta do servidor.
Repare que não existe nenhum usuário cadastrado. Para inserir um usuário de teste, acesse o http://localhost:8080
para acessar o RethinkDB, como a imagem a seguir:
Agora, acesse o Data Explorer
e crie um usuário default:
Agora, ao acessar novamente a rota de /api/users
na API
você verá a resposta do servidor com o usuário cadastrado.
Pronto. Você já pode criar sua própria RESTfull API com Node.js e RethinkDB!