Node.js RESTful API

¿Qué es REST?

REST, es decir, Transferencia de Estado Representacional (en inglés: Representational State Transfer, abreviado REST), es un estilo de arquitectura de software propuesto por el Dr. Roy Fielding en su tesis doctoral en el año 2000.

La transferencia de estado representacional es un conjunto de restricciones y principios de arquitectura. Las aplicaciones o diseños que cumplen estos principios y restricciones son RESTful. Cabe señalar que REST es un estilo de diseño, no un estándar. REST se basa generalmente en el uso de protocolos y estándares existentes ampliamente populares como HTTP, URI, XML (un subconjunto del Lenguaje de Marcado General Estándar) y HTML (una aplicación del Lenguaje de Marcado General Estándar). REST suele utilizar el formato de datos JSON.

Métodos HTTP

Los siguientes son los cuatro métodos de la arquitectura básica de REST:
  • GET- Se utiliza para obtener datos.

  • PUT- Se utiliza para actualizar o agregar datos.

  • DELETE- Se utiliza para eliminar datos.

  • POST- Se utiliza para agregar datos.


RESTful Web Services

Un Web service es una aplicación basada en web programable, independiente de la plataforma, de bajo acoplamiento y autocontenida. Puede utilizar el estándar abierto XML (un subconjunto del Lenguaje de Marcado General Estándar) para describir, publicar, descubrir, coordinar y configurar estas aplicaciones, y se utiliza para desarrollar aplicaciones distribuidas e interoperables.

Los Web Services basados en la arquitectura REST son RESTful.

Debido a su ligereza y a la característica de transmitir datos directamente a través de HTTP, el método RESTful de los servicios web se ha convertido en la alternativa más común. Los clientes pueden implementarse en varios lenguajes (como Java, Perl, Ruby, Python, PHP y Javascript [incluido Ajax]).

Los servicios web RESTful suelen poder ser accedidos por clientes automáticos o aplicaciones que representan al usuario. Sin embargo, la simplicidad de este servicio permite a los usuarios interactuar directamente con él, construyendo una URL GET en su navegador web y leyendo el contenido devuelto.

Para más información, puedes consultar:Explicación detallada de la arquitectura RESTful


Crear RESTful

Primero, crea un archivo de recursos de datos JSON llamado users.json, con el siguiente contenido:

{
   "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 los datos anteriores, creamos la siguiente API RESTful:

N.ºURIMétodo HTTPContenido enviadoResultado
1listUsersGETVacíoMostrar lista de todos los usuarios
2addUserPOSTCadena JSONAgregar nuevo usuario
3deleteUserDELETECadena JSONEliminar usuario
4:idGETVacíoMostrar detalles del usuario

Obtener lista de usuarios:

En el siguiente código, creamos la API RESTfullistUsers, utilizada para leer la lista de información de los usuarios. El código del archivo server.js es el siguiente:

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("应用实例,访问地址为 http://%s:%s", host, port)

})

A continuación, ejecuta el siguiente comando:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

Visita http://127.0.0.1:8081/listUsers en el navegador, el resultado es el siguiente:

{
   "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

En el siguiente código, creamos la API RESTfuladdUser, utilizada para agregar nuevos datos de usuario. El código del archivo server.js es el siguiente:

var express = require('express');
var app = express();
var fs = require("fs");

//添加的新用户数据
var user = {
   "user4" : {
      "name" : "mohit",
      "password" : "password4",
      "profession" : "teacher",
      "id": 4
   }
}

app.get('/addUser', function (req, res) {
   // 读取已存在的数据
   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("应用实例,访问地址为 http://%s:%s", host, port)

})

A continuación, ejecuta el siguiente comando:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

Visita http://127.0.0.1:8081/addUser en el navegador, el resultado es el siguiente:

{ 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 detalles del usuario

En el siguiente código, creamos la API RESTful:id (ID de usuario), utilizada para leer la información detallada del usuario especificado. El código del archivo server.js es el siguiente:

var express = require('express');
var app = express();
var fs = require("fs");

app.get('/:id', function (req, res) {
   // 首先我们读取已存在的用户
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
       data = JSON.parse( data );
       var user = data["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("应用实例,访问地址为 http://%s:%s", host, port)

})

A continuación, ejecuta el siguiente comando:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

Visita http://127.0.0.1:8081/2 en el navegador, el resultado es el siguiente:

{
   "name":"suresh",
   "password":"password2",
   "profession":"librarian",
   "id":2
}

Eliminar usuario

En el siguiente código, creamos la API RESTfuldeleteUser, utilizada para eliminar la información detallada del usuario especificado. En el siguiente ejemplo, el id de usuario es 2. El código del archivo server.js es el siguiente:

var express = require('express');
var app = express();
var fs = require("fs");

var id = 2;

app.get('/deleteUser', function (req, res) {

   // First read existing users.
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
       data = JSON.parse( data );
       delete data["user" + id];
       
       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("应用实例,访问地址为 http://%s:%s", host, port)

})

A continuación, ejecuta el siguiente comando:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

Visita http://127.0.0.1:8081/deleteUser en el navegador, el resultado es el siguiente:

{ user1:
   { name: 'mahesh',
     password: 'password1',
     profession: 'teacher',
     id: 1 },
  user3:
   { name: 'ramesh',
     password: 'password3',
     profession: 'clerk',
     id: 3 } 
}
Otras extensiones