Node.js - API RESTful

Cos'è l'architettura REST?

REST sta per REpresentational State Transfer. REST è un'architettura basata su standard web e utilizza il protocollo HTTP. Ruota intorno a una risorsa in cui ogni componente è una risorsa e una risorsa è accessibile da un'interfaccia comune utilizzando metodi standard HTTP. REST è stato introdotto per la prima volta da Roy Fielding nel 2000.

Un server REST fornisce semplicemente l'accesso alle risorse e il client REST accede e modifica le risorse utilizzando il protocollo HTTP. Qui ogni risorsa è identificata da URI / ID globali. REST utilizza varie rappresentazioni per rappresentare una risorsa come testo, JSON, XML ma JSON è la più popolare.

Metodi HTTP

I seguenti quattro metodi HTTP sono comunemente usati nell'architettura basata su REST.

  • GET - Viene utilizzato per fornire un accesso di sola lettura a una risorsa.

  • PUT - Viene utilizzato per creare una nuova risorsa.

  • DELETE - Viene utilizzato per rimuovere una risorsa.

  • POST - Viene utilizzato per aggiornare una risorsa esistente o creare una nuova risorsa.

Servizi Web RESTful

Un servizio Web è una raccolta di protocolli aperti e standard utilizzati per lo scambio di dati tra applicazioni o sistemi. Le applicazioni software scritte in vari linguaggi di programmazione e in esecuzione su varie piattaforme possono utilizzare i servizi Web per scambiare dati su reti di computer come Internet in un modo simile alla comunicazione tra processi su un singolo computer. Questa interoperabilità (ad esempio, comunicazione tra Java e Python, o applicazioni Windows e Linux) è dovuta all'uso di standard aperti.

I servizi Web basati sull'architettura REST sono noti come servizi Web RESTful. Questi servizi web utilizzano metodi HTTP per implementare il concetto di architettura REST. Un servizio Web RESTful di solito definisce un URI, Uniform Resource Identifier un servizio, che fornisce la rappresentazione delle risorse come JSON e un insieme di metodi HTTP.

Creazione di RESTful per una libreria

Considera che abbiamo un database di utenti basato su JSON con i seguenti utenti in un file 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
   }
}

Sulla base di queste informazioni forniremo le seguenti API RESTful.

Sr.No. URI Metodo HTTP POST corpo Risultato
1 listUsers OTTENERE vuoto Mostra l'elenco di tutti gli utenti.
2 Aggiungi utente INVIARE Stringa JSON Aggiungi i dettagli del nuovo utente.
3 deleteUser ELIMINA Stringa JSON Elimina un utente esistente.
4 : id OTTENERE vuoto Mostra i dettagli di un utente.

Sto mantenendo la maggior parte della parte di tutti gli esempi sotto forma di hard coding supponendo che tu sappia già come passare i valori dal front-end usando Ajax o semplici dati del modulo e come elaborarli usando express Request oggetto.

Elenca utenti

Implementiamo la nostra prima API RESTful listUsers utilizzando il codice seguente in un file 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)
})

Ora prova ad accedere all'API definita utilizzando l' URL: http://127.0.0.1:8081/listUsers e il metodo HTTP: GET sulla macchina locale utilizzando qualsiasi client REST. Questo dovrebbe produrre il seguente risultato:

È possibile modificare l'indirizzo IP specificato quando si inserirà la soluzione nell'ambiente di produzione.

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

Aggiungi utente

La seguente API ti mostrerà come aggiungere un nuovo utente nell'elenco. Di seguito è riportato il dettaglio del nuovo utente:

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

Puoi accettare lo stesso input sotto forma di JSON usando la chiamata Ajax, ma per il punto di vista dell'insegnamento, lo stiamo rendendo hard coded qui. Di seguito è riportato il fileaddUser API per un nuovo utente nel database -

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

Ora prova ad accedere all'API definita utilizzando l' URL: http://127.0.0.1:8081/addUser e il metodo HTTP: POST sulla macchina locale utilizzando qualsiasi client REST. Questo dovrebbe produrre il seguente risultato:

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

Mostra i dettagli

Ora implementeremo un'API che verrà chiamata utilizzando l'ID utente e mostrerà i dettagli dell'utente corrispondente.

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

Ora prova ad accedere all'API definita utilizzando l' URL: http://127.0.0.1:8081/2 e il metodo HTTP: GET sulla macchina locale utilizzando qualsiasi client REST. Questo dovrebbe produrre il seguente risultato:

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

Elimina utente

Questa API è molto simile all'API addUser in cui riceviamo i dati di input tramite req.body e quindi, in base all'ID utente, eliminiamo quell'utente dal database. Per mantenere il nostro programma semplice, supponiamo di eliminare l'utente 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)
})

Ora prova ad accedere all'API definita utilizzando l' URL: http://127.0.0.1:8081/deleteUser e il metodo HTTP: DELETE sulla macchina locale utilizzando qualsiasi client REST. Questo dovrebbe produrre il seguente risultato:

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