Aprenda a criar uma RESTful API com Node.js em 5 minutos
Se acompanha a área da programação de serviços/aplicações certamente que já ouviu falar no termo “Web Services” e API. Na prática um Web Service/API corresponde a um ou mais métodos que podem ser acedidos ou invocados por outras aplicações (móveis, para desktop ou para a web), utilizando as tradicionais tecnologias e protocolos Web.
Hoje vamos ensinar a criar um WebService tendo como base o modelo de arquitectura REST.
REST - REpresentational State Transfer é um modelo de arquitectura que usa o protocolo HTTP para comunicação. Existem várias representações para apresentar um recurso como por exemplo XML, JSON, sendo que este último é o mais usado.
Relativamente aos métodos HTTP mais usados numa arquitetura REST, destaque para:
- GET
- Acesso apenas de leitura a um recurso
- PUT
- Para criar um novo recurso
- DELETE
- Remover um recurso
- POST
- Actualizar ou criar um novo recurso
Vamos a um exercício...
Para este artigo vamos criar os seguintes quatro métodos:
- listarUsers (GET) - lista de todos os utilizadores
- addUser (PUT) - adicionar utilizador
- deleteUser (DELETE) - apagar utilizador
- :id (POST) - Detalhes de um utilizador
Preparação do projeto
Antes de começarmos a programar os métodos vamos criar a estrutura do nosso projeto. Para isso vamos criar um diretório (servernode) para o projeto e também o ficheiro package.json que terá informações sobre o próprio projeto. A criação do ficheiro package.json pode ser feita facilmente com o comando npm init, bastando para isso responder a algumas questões.
mkdir servernode cd servernode/ npm init |
Depois da criação do ficheiro package.json vamos instalar o módulo Express.js. O Express é uma framework para Node que permite o desenvolvimento de aplicações web de uma forma muito simples. Para instalar o Express basta executar o seguinte comando:
npm install express -S |
Método listarUsers
Depois da instalação do módulo com sucesso, vamos então avançar para a criação do método listarUsers. Para isso vamos criar o ficheiro app.js que terá todos os métodos.
touch app.js |
Dentro do ficheiro devem introduzir o seguinte código:
var express = require('express'); var app = express(); // Definir a route principal app.get('/', function(req, res) { res.send('RESTful API - Pplware'); }); // Lista de Utilizadores var users = [ { id: 1, username: 'Pedro Pinto', email: 'ppinto@ppl.com' }, { id: 2, username: 'Francisco', email: 'francisco@ppl.com' }, { id: 3, username: 'Carla Figueiredo', email: 'cfig@ppl.com' } ]; // Definir um endpoint da API app.get('/api/listaUsers', function(req, res, next) { res.send(users); }) // Aplicação disponível em http://127.0.0.1:8888/ app.listen(8888); |
Agora basta gravar e temos o primeiro método da RESTful API criado. Para executar o código basta executar o seguinte comando:
node app.js |
Em seguida basta abrir o browser com o endereço http://localhost:8888/api/listaUsers para aceder ao método criado. O resultado será o seguinte:
Nota: Também podem aceder à route principal, uma vez que está criada. Para isso basta usarem o endereço http://localhost:8888.
Como viram com poucas linhas de código foi possível criar uma RESTful API com servidor Web incluído. Em próximos artigos iremos criar os próximos métodos, e também explorar a questão da segurança dos mesmos. Estejam atentos.
Este artigo tem mais de um ano
Não é mais correto assim?
res.status(200).end(users);
Não. o método send() serve para enviar um objecto e terminar o pedido. Ao mesmo tempo, no cabeçalho da resposta coloca o status 200, já que se está a fazer send de qualquer coisa, esta coisa existe.
É de louvar a apresentação ao node e a APIs.
No entanto, penso que esta apresentação peca por apresentar uma solução e não uma construção lógica em como lá chegar… (o que é e para que serve o NPM? EXPRESS???? quem nunca teve contacto com estas tecnologias ficará um pouco perdido, digo eu)
Apenas mais uma achega: as APIs REST acentam em HTTP e nos seus métodos (GET, PUT, DELETE, POST), mas a semântica do HTTP deve ser cumprida na mesma. De uma forma rápida, o HTTP permite acções sobre recursos, e não a chamada de funções, como apresentaram
app.get(‘/api/listaUsers’, function(req, res, next) {
res.send(users);
})
Deveria – do meu ponto de vista – ser mais assim:
app.get(‘/api/user’, getUsers);
app.delete(‘/api/user/&id’, deleteUser);
app.put(‘/api/user/&id’, updateUser);
app.post(‘/api/user’, addUser);
São apenas críticas construtivas, de modo a que não se criem maus hábitos. Até porque uma API REST não é um webservice. Um é orientado ao recurso enquanto que o outro à função.
Obrigado Carlos pelo bom feedback.
Quanto ao NPM já tinha falado em outros artigos. Do Express falei neste. Talvez um artigo dedicado para cada um dos temas nos próximos tempos.
Quanto à programação em si, tudo vai da forma com que se aprende e se usa no dia a dia. Mas obrigado pelas sugestões.
Concordo. Sendo REST uma semântica de como usar os métodos HTTP, ao adicionar um user com PUT a listar detalhes com POST, deixa de ser REST.
E um reparo, no principio na lista de métodos, o POST e PUT estão trocados (https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html).
Visto que ando a aprender sobre isto em Java (e terei teste depois de amanhã!), irei certamente usar este artigo no futuro quando começar a mexer com Node, portanto obrigado 🙂
Baseado no Express, o Sails (http://sailsjs.com/) é direccionado a serviços RESTful. É uma boa opção. Outra opção é o servidor Hapi.
Obrigado JL pelas sugestões.
Mas como se adiciona users ou apaga users com este exemplo ? Obrigado.
Pequena gralha no texto:
“por exemplo JSON, XML, JSON, sendo que este último é o mais usado.”
JSON duas vezes a segunda está correcta ou referem-se mesmo ao XML?
Caro Pedro Pinto… Saudações do Brasil.
Seu artigo me poupou algumas horas de pesquisa.
Obrigado.
Boa, obrigado 🙂
Olá Pedro, bom artigo, obrigado!
E o restante da aplicação, vai ter continuação?
Boas, sim, estou a tratar.