RESTful API com Node.js
15 Sep 2014 - Ricardo PereiraHoje em dia são poucas as aplicações que não necessitam de um backend service para suporte de dados. Para um indie developer é fundamental ter esse conhecimento.
O mais comum para ter um backend para uma aplicação será desenvolver um web service para ser consumido. São várias as possibilidades mas as mais comuns são:
- REST (Representational State Transfer).
- SOAP (Simple Object Access Protocol).
Existem muitas diferenças entre REST e SOAP porque na realidade são coisas distintas. O SOAP é um protocolo enquanto REST é um modelo de arquitectura. É possível compará-las da seguinte forma:
- Formato da mensagem:
- SOAP por defeito usa XML.
- REST tem a possibilidade de usar XML, Atom, JSON, etc. Costuma-se implementar em JSON porque se torna mais simples a leitura dos dados por existirem bons interpretadores nativos em JavaScript, Java, Objective-C, Swift, etc.
- Protocolo de comunicação:
- SOAP pode-se usar HTTP(S), SMTP, TCP e UDP.
- REST pode-se usar em qualquer protocolo, é independente.
Temos muitas opções para a criação de uma RESTful API. Algumas delas são:
Node.js
Neste momento estou a utilizar Node.js juntamente com Express.js. Node é um interpretador de JavaScript do lado do servidor, enquanto que Express é uma framework para Node e dá a possibilidade de criar aplicações web de forma bastante simples.
With a myriad of HTTP utility methods and Connect middleware at your disposal, creating a robust user-friendly API is quick and easy.
Easily building fast, scalable network applications: download
Os binários node
e npm
ficam disponíveis após a instalação do Node.js. O node é o compilador e o npm é o package manager oficial do Node.js.
Exemplo: api/get_users
Para se iniciar um projecto de raiz na directoria NodeServer
:
mkdir NodeServer
cd NodeServer
npm init
O comando init
irá configurar o projecto criando o ficheiro package.json
. O ficheiro contém toda a configuração necessária. Por exemplo, para as seguintes opções:
name: (NodeServer)
version: (0.0.0) 1.0.0
description: Exemplo de um RESTful API
entry point: (index.js) app.js
test command:
git repository:
keywords: API
author: Ricardo Pereira
license: (ISC) MIT
irá gerar o seguinte package.json
:
Para se instalar módulos, neste caso o Express.js, basta correr o seguinte comando:
npm install express -S
O atributo -S
serve para guardar a dependência no package.json
. Se formos confirmar:
cat package.json
No exemplo, decidi que a aplicação iniciasse com o ficheiro app.js
. Para o criar:
touch app.js
Com a framework torna-se super simples criar uma API para ser consumida em REST. Por exemplo, para se aceder a uma lista de utilizadores (colocar o código no ficheiro app.js
):
Com uma dúzia de linhas e ficamos com uma RESTful API pronta a ser usada. Para correr a aplicação:
node app.js
Neste momento a aplicação está à escuta na porta 9000. Para testar o acesso à API: http://localhost:9000/api/get_users.
Resultado:
Conclusão
Neste exemplo, qualquer cliente tem acesso à API e por isso não é boa prática usá-lo em produção. O próximo artigo será sobre as várias estratégias de como proteger o acesso à API.
Abraço,