Node.js - API RESTful
¿Qué es la arquitectura REST?
REST significa Transferencia de Estado REpresentacional. REST es una arquitectura basada en estándares web y utiliza el protocolo HTTP. Gira en torno a recursos donde cada componente es un recurso y se accede a un recurso mediante una interfaz común utilizando métodos estándar HTTP. REST fue introducido por primera vez por Roy Fielding en 2000.
Un servidor REST simplemente proporciona acceso a los recursos y el cliente REST accede y modifica los recursos mediante el protocolo HTTP. Aquí, cada recurso se identifica mediante URI / ID globales. REST utiliza varias representaciones para representar un recurso como texto, JSON, XML, pero JSON es el más popular.
Métodos HTTP
Los siguientes cuatro métodos HTTP se utilizan comúnmente en la arquitectura basada en REST.
GET - Se utiliza para proporcionar acceso de solo lectura a un recurso.
PUT - Esto se usa para crear un nuevo recurso.
DELETE - Se utiliza para eliminar un recurso.
POST - Se utiliza para actualizar un recurso existente o crear un nuevo recurso.
Servicios web RESTful
Un servicio web es una colección de protocolos y estándares abiertos que se utilizan para intercambiar datos entre aplicaciones o sistemas. Las aplicaciones de software escritas en varios lenguajes de programación y que se ejecutan en varias plataformas pueden utilizar servicios web para intercambiar datos a través de redes informáticas como Internet de una manera similar a la comunicación entre procesos en una sola computadora. Esta interoperabilidad (por ejemplo, la comunicación entre Java y Python, o aplicaciones de Windows y Linux) se debe al uso de estándares abiertos.
Los servicios web basados en la arquitectura REST se conocen como servicios web RESTful. Estos servicios web utilizan métodos HTTP para implementar el concepto de arquitectura REST. Un servicio web RESTful generalmente define un URI, un identificador uniforme de recursos, un servicio, que proporciona una representación de recursos como JSON y un conjunto de métodos HTTP.
Creando RESTful para una biblioteca
Considere que tenemos una base de datos basada en JSON de usuarios que tienen los siguientes usuarios en un archivo 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
}
}
Basándonos en esta información, proporcionaremos las siguientes API RESTful.
No Señor. | URI | Método HTTP | POST cuerpo | Resultado |
---|---|---|---|---|
1 | listUsers | OBTENER | vacío | Mostrar lista de todos los usuarios. |
2 | agregar usuario | ENVIAR | Cadena JSON | Agregue detalles del nuevo usuario. |
3 | borrar usuario | ELIMINAR | Cadena JSON | Eliminar un usuario existente. |
4 | :carné de identidad | OBTENER | vacío | Muestra los detalles de un usuario. |
Mantengo la mayor parte de la parte de todos los ejemplos en forma de codificación rígida, asumiendo que ya sabe cómo pasar valores desde el front-end usando Ajax o datos de formulario simple y cómo procesarlos usando express Request objeto.
Lista de usuarios
Implementemos nuestra primera API RESTful listUsers usando el siguiente código en un archivo 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)
})
Ahora intente acceder a la API definida usando la URL: http://127.0.0.1:8081/listUsers y el método HTTP: GET en la máquina local usando cualquier cliente REST. Esto debería producir el siguiente resultado:
Puede cambiar la dirección IP dada cuando ponga la solución en el entorno de producción.
{
"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
}
}
Agregar usuario
La siguiente API le mostrará cómo agregar un nuevo usuario en la lista. A continuación se muestra el detalle del nuevo usuario:
user = {
"user4" : {
"name" : "mohit",
"password" : "password4",
"profession" : "teacher",
"id": 4
}
}
Puede aceptar la misma entrada en forma de JSON usando una llamada Ajax, pero para enseñar el punto de vista, lo estamos codificando aquí. Lo siguiente es eladdUser API a un nuevo usuario en la base de datos -
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)
})
Ahora intente acceder a la API definida usando la URL: http://127.0.0.1:8081/addUser y el método HTTP: POST en la máquina local usando cualquier cliente REST. Esto debería producir el siguiente 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 detalle
Ahora implementaremos una API que se llamará usando el ID de usuario y mostrará el detalle del usuario correspondiente.
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)
})
Ahora intente acceder a la API definida usando la URL: http://127.0.0.1:8081/2 y el método HTTP: GET en la máquina local usando cualquier cliente REST. Esto debería producir el siguiente resultado:
{"name":"suresh","password":"password2","profession":"librarian","id":2}
Borrar usuario
Esta API es muy similar a la API addUser, donde recibimos datos de entrada a través de req.body y luego, según el ID de usuario, eliminamos ese usuario de la base de datos. Para mantener nuestro programa simple, asumimos que vamos a eliminar al usuario con 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)
})
Ahora intente acceder a la API definida usando la URL: http://127.0.0.1:8081/deleteUser y el método HTTP: DELETE en la máquina local usando cualquier cliente REST. Esto debería producir el siguiente resultado:
{"user1":{"name":"mahesh","password":"password1","profession":"teacher","id":1},
"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3}}