Aprenda a criar uma RESTful API com Node.js em 5 minutos

13 Comentários

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.

Via

Comentários

13

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Jose Cordeiro
    Jose Cordeiro

    Não é mais correto assim?

    res.status(200).end(users);

    1. Avatar de Carlos
      Carlos

      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.

  2. Avatar de Carlos
    Carlos

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

    1. Avatar de Pedro Pinto

      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.

    2. Avatar de MiguelPynto
      MiguelPynto

      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 🙂

  3. Avatar de JL
    JL

    Baseado no Express, o Sails (http://sailsjs.com/) é direccionado a serviços RESTful. É uma boa opção. Outra opção é o servidor Hapi.

    1. Avatar de Pedro Pinto

      Obrigado JL pelas sugestões.

  4. Avatar de Phil
    Phil

    Mas como se adiciona users ou apaga users com este exemplo ? Obrigado.

  5. Avatar de Gonçalo
    Gonçalo

    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?

  6. Avatar de Marco Aurélio Barbiero
    Marco Aurélio Barbiero

    Caro Pedro Pinto… Saudações do Brasil.
    Seu artigo me poupou algumas horas de pesquisa.
    Obrigado.

  7. Avatar de Marcelo Caetano
    Marcelo Caetano

    Olá Pedro, bom artigo, obrigado!

    E o restante da aplicação, vai ter continuação?

    1. Avatar de Pedro Pinto

      Boas, sim, estou a tratar.