Node.js - API RESTful

Qu'est-ce que l'architecture REST?

REST signifie REpresentational State Transfer. REST est une architecture basée sur des standards Web et utilise le protocole HTTP. Il tourne autour de la ressource où chaque composant est une ressource et une ressource est accessible par une interface commune à l'aide de méthodes standard HTTP. REST a été introduit pour la première fois par Roy Fielding en 2000.

Un serveur REST fournit simplement l'accès aux ressources et le client REST accède et modifie les ressources à l'aide du protocole HTTP. Ici, chaque ressource est identifiée par des URI / ID globaux. REST utilise diverses représentations pour représenter une ressource comme du texte, JSON, XML mais JSON est la plus populaire.

Méthodes HTTP

Les quatre méthodes HTTP suivantes sont couramment utilisées dans l'architecture basée sur REST.

  • GET - Ceci est utilisé pour fournir un accès en lecture seule à une ressource.

  • PUT - Ceci est utilisé pour créer une nouvelle ressource.

  • DELETE - Ceci est utilisé pour supprimer une ressource.

  • POST - Ceci est utilisé pour mettre à jour une ressource existante ou créer une nouvelle ressource.

Services Web RESTful

Un service Web est un ensemble de protocoles et de normes ouverts utilisés pour l'échange de données entre des applications ou des systèmes. Les applications logicielles écrites dans divers langages de programmation et exécutées sur diverses plates-formes peuvent utiliser des services Web pour échanger des données sur des réseaux informatiques comme Internet d'une manière similaire à la communication inter-processus sur un seul ordinateur. Cette interopérabilité (par exemple, la communication entre Java et Python, ou des applications Windows et Linux) est due à l'utilisation de standards ouverts.

Les services Web basés sur l'architecture REST sont appelés services Web RESTful. Ces webservices utilisent des méthodes HTTP pour implémenter le concept d'architecture REST. Un service Web RESTful définit généralement un URI, Uniform Resource Identifier un service, qui fournit une représentation des ressources telles que JSON et un ensemble de méthodes HTTP.

Création de RESTful pour une bibliothèque

Considérez que nous avons une base de données basée sur JSON d'utilisateurs ayant les utilisateurs suivants dans un fichier 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
   }
}

Sur la base de ces informations, nous allons fournir les API RESTful suivantes.

N ° Sr. URI Méthode HTTP Corps POST Résultat
1 listUsers AVOIR vide Afficher la liste de tous les utilisateurs.
2 addUser PUBLIER Chaîne JSON Ajoutez les détails du nouvel utilisateur.
3 Supprimer l'utilisateur EFFACER Chaîne JSON Supprimer un utilisateur existant.
4 : id AVOIR vide Afficher les détails d'un utilisateur.

Je garde la plupart de la partie de tous les exemples sous forme de codage en dur en supposant que vous savez déjà comment passer des valeurs à partir du front-end en utilisant Ajax ou des données de formulaire simples et comment les traiter en utilisant express Request objet.

Liste des utilisateurs

Implémentons notre première API RESTful listUsers en utilisant le code suivant dans un fichier 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)
})

Maintenant, essayez d'accéder à l'API définie en utilisant l' URL: http://127.0.0.1:8081/listUsers et la méthode HTTP: GET sur la machine locale en utilisant n'importe quel client REST. Cela devrait produire le résultat suivant -

Vous pouvez modifier l'adresse IP donnée lorsque vous placerez la solution dans l'environnement de production.

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

L'API suivante vous montrera comment ajouter un nouvel utilisateur dans la liste. Voici le détail du nouvel utilisateur -

user = {
   "user4" : {
      "name" : "mohit",
      "password" : "password4",
      "profession" : "teacher",
      "id": 4
   }
}

Vous pouvez accepter la même entrée sous la forme de JSON en utilisant un appel Ajax, mais pour l'enseignement du point de vue, nous le rendons codé en dur ici. Voici leaddUser API à un nouvel utilisateur dans la base de données -

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

Maintenant, essayez d'accéder à l'API définie en utilisant l' URL: http://127.0.0.1:8081/addUser et la méthode HTTP: POST sur la machine locale en utilisant n'importe quel client REST. Cela devrait produire le résultat 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}
}

Montrer les détails

Nous allons maintenant implémenter une API qui sera appelée à l'aide de l'ID utilisateur et affichera le détail de l'utilisateur correspondant.

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

Maintenant, essayez d'accéder à l'API définie en utilisant l' URL: http://127.0.0.1:8081/2 et la méthode HTTP: GET sur la machine locale en utilisant n'importe quel client REST. Cela devrait produire le résultat suivant -

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

Supprimer l'utilisateur

Cette API est très similaire à l'API addUser où nous recevons les données d'entrée via req.body, puis en fonction de l'ID utilisateur, nous supprimons cet utilisateur de la base de données. Pour garder notre programme simple, nous supposons que nous allons supprimer l'utilisateur avec l'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)
})

Maintenant, essayez d'accéder à l'API définie en utilisant l' URL: http://127.0.0.1:8081/deleteUser et la méthode HTTP: DELETE sur la machine locale en utilisant n'importe quel client REST. Cela devrait produire le résultat suivant -

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