API RESTful avec Node.js

Qu'est-ce que REST ?

REST (Representational State Transfer) est un style d'architecture logicielle proposé par le Dr Roy Fielding dans sa thèse de doctorat en 2000.

Representational State Transfer est un ensemble de contraintes et de principes architecturaux. Les applications ou conceptions qui satisfont ces contraintes et principes sont RESTful. Notez que REST est un style de conception, et non une norme. REST est généralement basé sur l'utilisation de protocoles et de normes existants et largement répandus tels que HTTP, URI, XML (un sous-ensemble de Standard Generalized Markup Language) et HTML (une application de Standard Generalized Markup Language). REST utilise généralement le format de données JSON.

Méthodes HTTP

Voici les quatre méthodes de l'architecture REST de base :
  • GET- Utilisé pour récupérer des données.

  • PUT- Utilisé pour mettre à jour ou ajouter des données.

  • DELETE- Utilisé pour supprimer des données.

  • POST- Utilisé pour ajouter des données.


Services Web RESTful

Un service Web est une application basée sur le Web, programmable, autonome, faiblement couplée et indépendante de la plateforme. Il utilise le standard ouvert XML (un sous-ensemble du Standard Generalized Markup Language) pour décrire, publier, découvrir, coordonner et configurer ces applications, et il est utilisé pour développer des applications distribuées et interopérables.

Les services Web basés sur l'architecture REST sont RESTful.

En raison de sa légèreté et de sa capacité à transférer des données directement via HTTP, l'approche RESTful des services Web est devenue l'alternative la plus courante. Les clients peuvent être implémentés dans divers langages (tels que les programmes Java, Perl, Ruby, Python, PHP et Javascript [y compris Ajax]).

Les services Web RESTful sont généralement accessibles par des clients automatisés ou des applications agissant au nom des utilisateurs. Cependant, la simplicité de ces services permet aux utilisateurs d'interagir directement avec eux, en construisant une URL GET dans leur navigateur Web et en lisant le contenu renvoyé.

Pour plus d'informations, voir :Explication détaillée de l'architecture RESTful


Création de RESTful

Tout d'abord, créez un fichier de données JSON users.json avec le contenu suivant :

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

Sur la base des données ci-dessus, nous créons les API RESTful suivantes :

N° de sérieURIMéthode HTTPContenu de la requêteRésultat
1listUsersGETVideAfficher la liste de tous les utilisateurs
2addUserPOSTChaîne JSONAjouter un nouvel utilisateur
3deleteUserDELETEChaîne JSONSupprimer un utilisateur
4:idGETVideAfficher les informations détaillées de l'utilisateur

Obtenir la liste des utilisateurs :

Dans le code suivant, nous créons une API RESTfullistUsers, utilisée pour lire la liste des informations utilisateur. Le code du fichier server.js est le suivant :

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)

})

Ensuite, exécutez la commande suivante :

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

Visitez http://127.0.0.1:8081/listUsers dans le navigateur, et le résultat est le suivant :

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

Ajouter un utilisateur

Dans le code suivant, nous créons une API RESTfuladdUser, utilisée pour ajouter les données d'un nouvel utilisateur. Le code du fichier server.js est le suivant :

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)

})

Ensuite, exécutez la commande suivante :

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

Visitez http://127.0.0.1:8081/addUser dans le navigateur, et le résultat est le suivant :

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

Afficher les détails de l'utilisateur

Dans le code suivant, nous créons une API RESTful:id (user id), utilisée pour lire les informations détaillées de l'utilisateur spécifié. Le code du fichier server.js est le suivant :

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)

})

Ensuite, exécutez la commande suivante :

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

Visitez http://127.0.0.1:8081/2 dans le navigateur, et le résultat est le suivant :

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

Supprimer un utilisateur

Dans le code suivant, nous créons une API RESTfuldeleteUser, utilisée pour supprimer les informations détaillées de l'utilisateur spécifié. Dans l'exemple suivant, l'id de l'utilisateur est 2. Le code du fichier server.js est le suivant :

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)

})

Ensuite, exécutez la commande suivante :

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

Visitez http://127.0.0.1:8081/deleteUser dans le navigateur, et le résultat est le suivant :

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