Node.js - API RESTful
O que é arquitetura REST?
REST significa Transferência de Estado Representacional. REST é uma arquitetura baseada em padrões da web e usa protocolo HTTP. Ele gira em torno de recurso onde cada componente é um recurso e um recurso é acessado por uma interface comum usando métodos padrão HTTP. O REST foi introduzido pela primeira vez por Roy Fielding em 2000.
Um servidor REST simplesmente fornece acesso a recursos e o cliente REST acessa e modifica os recursos usando o protocolo HTTP. Aqui, cada recurso é identificado por URIs / IDs globais. REST usa várias representações para representar um recurso como texto, JSON, XML, mas JSON é o mais popular.
Métodos HTTP
Os quatro métodos HTTP a seguir são comumente usados na arquitetura baseada em REST.
GET - Isso é usado para fornecer acesso somente leitura a um recurso.
PUT - Isso é usado para criar um novo recurso.
DELETE - Isso é usado para remover um recurso.
POST - Isso é usado para atualizar um recurso existente ou criar um novo recurso.
Serviços da Web RESTful
Um serviço da web é uma coleção de protocolos e padrões abertos usados para trocar dados entre aplicativos ou sistemas. Os aplicativos de software escritos em várias linguagens de programação e em execução em várias plataformas podem usar serviços da web para trocar dados em redes de computadores como a Internet de uma maneira semelhante à comunicação entre processos em um único computador. Essa interoperabilidade (por exemplo, comunicação entre aplicativos Java e Python ou Windows e Linux) se deve ao uso de padrões abertos.
Os serviços da Web baseados na arquitetura REST são conhecidos como serviços da Web RESTful. Esses serviços da web usam métodos HTTP para implementar o conceito de arquitetura REST. Um serviço da web RESTful geralmente define um URI, Uniform Resource Identifier um serviço, que fornece representação de recursos como JSON e um conjunto de métodos HTTP.
Criando RESTful para uma biblioteca
Considere que temos um banco de dados de usuários baseado em JSON com os seguintes usuários em um arquivo users.json:
{
"user1" : {
"name" : "mahesh",
"password" : "password1",
"profession" : "teacher",
"id": 1
},
"user2" : {
"name" : "suresh",
"password" : "password2",
"profession" : "librarian",
"id": 2
},
"user3" : {
"name" : "ramesh",
"password" : "password3",
"profession" : "clerk",
"id": 3
}
}
Com base nessas informações, forneceremos as seguintes APIs RESTful.
Sr. Não. | URI | Método HTTP | POST body | Resultado |
---|---|---|---|---|
1 | listUsers | PEGUE | vazio | Mostra a lista de todos os usuários. |
2 | adicionar usuário | POSTAR | String JSON | Adicione detalhes do novo usuário. |
3 | deletar usuário | EXCLUIR | String JSON | Exclua um usuário existente. |
4 | :Eu iria | PEGUE | vazio | Mostra os detalhes de um usuário. |
Estou mantendo a maior parte de todos os exemplos na forma de codificação presumindo que você já saiba como passar valores do front end usando Ajax ou dados de formulário simples e como processá-los usando express Request objeto.
Listar usuários
Vamos implementar nossa primeira API RESTful listUsers usando o seguinte código em um arquivo server.js -
server.js
var express = require('express');
var app = express();
var fs = require("fs");
app.get('/listUsers', function (req, res) {
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
console.log( data );
res.end( data );
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
Agora tente acessar a API definida usando URL: http://127.0.0.1:8081/listUsers e Método HTTP: GET na máquina local usando qualquer cliente REST. Isso deve produzir o seguinte resultado -
Você pode alterar o endereço IP fornecido quando colocar a solução no ambiente de produção.
{
"user1" : {
"name" : "mahesh",
"password" : "password1",
"profession" : "teacher",
"id": 1
},
"user2" : {
"name" : "suresh",
"password" : "password2",
"profession" : "librarian",
"id": 2
},
"user3" : {
"name" : "ramesh",
"password" : "password3",
"profession" : "clerk",
"id": 3
}
}
Adicionar usuário
A API a seguir mostrará como adicionar um novo usuário à lista. A seguir estão os detalhes do novo usuário -
user = {
"user4" : {
"name" : "mohit",
"password" : "password4",
"profession" : "teacher",
"id": 4
}
}
Você pode aceitar a mesma entrada na forma de JSON usando a chamada Ajax, mas para o ponto de vista do ensino, estamos tornando-a codificada aqui. A seguir está oaddUser API para um novo usuário no banco de dados -
server.js
var express = require('express');
var app = express();
var fs = require("fs");
var user = {
"user4" : {
"name" : "mohit",
"password" : "password4",
"profession" : "teacher",
"id": 4
}
}
app.post('/addUser', function (req, res) {
// First read existing users.
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
data = JSON.parse( data );
data["user4"] = user["user4"];
console.log( data );
res.end( JSON.stringify(data));
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
Agora tente acessar a API definida usando URL: http://127.0.0.1:8081/addUser e Método HTTP: POST na máquina local usando qualquer cliente REST. Isso deve produzir o seguinte resultado -
{
"user1":{"name":"mahesh","password":"password1","profession":"teacher","id":1},
"user2":{"name":"suresh","password":"password2","profession":"librarian","id":2},
"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3},
"user4":{"name":"mohit","password":"password4","profession":"teacher","id":4}
}
Mostrar Detalhe
Agora vamos implementar uma API que será chamada usando o ID do usuário e exibirá o detalhe do usuário correspondente.
server.js
var express = require('express');
var app = express();
var fs = require("fs");
app.get('/:id', function (req, res) {
// First read existing users.
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
var users = JSON.parse( data );
var user = users["user" + req.params.id]
console.log( user );
res.end( JSON.stringify(user));
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
Agora tente acessar a API definida usando URL: http://127.0.0.1:8081/2 e Método HTTP: GET na máquina local usando qualquer cliente REST. Isso deve produzir o seguinte resultado -
{"name":"suresh","password":"password2","profession":"librarian","id":2}
Deletar usuário
Esta API é muito semelhante à API addUser, onde recebemos dados de entrada por meio de req.body e, com base no ID do usuário, excluímos esse usuário do banco de dados. Para manter nosso programa simples, presumimos que excluiremos o usuário com ID 2.
server.js
var express = require('express');
var app = express();
var fs = require("fs");
var id = 2;
app.delete('/deleteUser', function (req, res) {
// First read existing users.
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
data = JSON.parse( data );
delete data["user" + 2];
console.log( data );
res.end( JSON.stringify(data));
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
Agora tente acessar a API definida usando URL: http://127.0.0.1:8081/deleteUser e Método HTTP: DELETE na máquina local usando qualquer cliente REST. Isso deve produzir o seguinte resultado -
{"user1":{"name":"mahesh","password":"password1","profession":"teacher","id":1},
"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3}}