Node.js - RESTful API
Co to jest architektura REST?
REST oznacza REpresentational State Transfer. REST jest architekturą opartą na standardach internetowych i wykorzystuje protokół HTTP. Obraca się wokół zasobu, w którym każdy komponent jest zasobem, a dostęp do zasobu uzyskuje się przez wspólny interfejs przy użyciu standardowych metod HTTP. REST został po raz pierwszy wprowadzony przez Roya Fieldinga w 2000 roku.
Serwer REST po prostu zapewnia dostęp do zasobów, a klient REST uzyskuje dostęp i modyfikuje zasoby za pomocą protokołu HTTP. Tutaj każdy zasób jest identyfikowany przez URI / globalne ID. REST używa różnych reprezentacji do reprezentowania zasobów, takich jak tekst, JSON, XML, ale JSON jest najpopularniejszym.
Metody HTTP
Następujące cztery metody HTTP są powszechnie używane w architekturze opartej na REST.
GET - Służy do zapewnienia dostępu tylko do odczytu do zasobu.
PUT - Służy do tworzenia nowego zasobu.
DELETE - Służy do usuwania zasobu.
POST - Służy do aktualizacji istniejącego zasobu lub tworzenia nowego zasobu.
Usługi sieciowe RESTful
Usługa internetowa to zbiór otwartych protokołów i standardów używanych do wymiany danych między aplikacjami lub systemami. Aplikacje napisane w różnych językach programowania i działające na różnych platformach mogą wykorzystywać usługi sieciowe do wymiany danych w sieciach komputerowych, takich jak Internet, w sposób podobny do komunikacji między procesami na jednym komputerze. Ta interoperacyjność (np. Komunikacja między aplikacjami Java i Python lub Windows i Linux) wynika z wykorzystania otwartych standardów.
Usługi sieciowe oparte na architekturze REST są znane jako usługi sieciowe RESTful. Te usługi sieciowe wykorzystują metody HTTP do implementacji koncepcji architektury REST. Usługa sieciowa zgodna ze specyfikacją REST zwykle definiuje identyfikator URI, Uniform Resource Identifier, usługę, która zapewnia reprezentację zasobów, taką jak JSON i zestaw metod HTTP.
Tworzenie RESTful dla biblioteki
Rozważmy, że mamy bazę danych użytkowników opartą na formacie JSON, która ma następujących użytkowników w pliku 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
}
}
Na podstawie tych informacji udostępnimy następujące interfejsy API RESTful.
Sr.No. | URI | Metoda HTTP | POST body | Wynik |
---|---|---|---|---|
1 | listUsers | DOSTAĆ | pusty | Pokaż listę wszystkich użytkowników. |
2 | Dodaj użytkownika | POCZTA | Ciąg JSON | Dodaj szczegóły nowego użytkownika. |
3 | Usuń użytkownika | USUNĄĆ | Ciąg JSON | Usuń istniejącego użytkownika. |
4 | :ID | DOSTAĆ | pusty | Pokaż szczegóły użytkownika. |
Większość przykładów zachowuję w formie twardego kodowania, zakładając, że wiesz już, jak przekazywać wartości z interfejsu użytkownika za pomocą Ajax lub prostych danych formularza i jak je przetwarzać za pomocą ekspresu Request obiekt.
Lista użytkowników
Zaimplementujmy nasze pierwsze RESTful API listUsers używając następującego kodu w pliku 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)
})
Teraz spróbuj uzyskać dostęp do zdefiniowanego API, używając adresu URL: http://127.0.0.1:8081/listUsers i metody HTTP: POBIERZ na komputer lokalny przy użyciu dowolnego klienta REST. Powinno to dać następujący wynik -
Możesz zmienić podany adres IP, gdy umieścisz rozwiązanie w środowisku produkcyjnym.
{
"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
}
}
Dodaj użytkownika
Poniższy interfejs API pokaże, jak dodać nowego użytkownika do listy. Poniżej znajdują się szczegóły nowego użytkownika -
user = {
"user4" : {
"name" : "mohit",
"password" : "password4",
"profession" : "teacher",
"id": 4
}
}
Możesz zaakceptować te same dane wejściowe w postaci JSON za pomocą wywołania Ajax, ale z punktu widzenia nauczania, robimy to na sztywno tutaj. Poniżej znajduje sięaddUser API dla nowego użytkownika w bazie danych -
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)
})
Teraz spróbuj uzyskać dostęp do zdefiniowanego API za pomocą adresu URL: http://127.0.0.1:8081/addUser i metody HTTP: POST na komputerze lokalnym przy użyciu dowolnego klienta REST. Powinno to dać następujący wynik -
{
"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}
}
Pokaż szczegół
Teraz zaimplementujemy API, które zostanie wywołane przy użyciu identyfikatora użytkownika i wyświetli szczegóły odpowiedniego użytkownika.
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)
})
Teraz spróbuj uzyskać dostęp do zdefiniowanego API za pomocą adresu URL: http://127.0.0.1:8081/2 i metody HTTP: POBIERZ na komputer lokalny przy użyciu dowolnego klienta REST. Powinno to dać następujący wynik -
{"name":"suresh","password":"password2","profession":"librarian","id":2}
Usuń użytkownika
To API jest bardzo podobne do addUser API, w którym otrzymujemy dane wejściowe przez req.body, a następnie na podstawie identyfikatora użytkownika usuwamy go z bazy danych. Aby nasz program był prosty, zakładamy, że usuniemy użytkownika o identyfikatorze 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)
})
Teraz spróbuj uzyskać dostęp do zdefiniowanego API, używając adresu URL: http://127.0.0.1:8081/deleteUser i metody HTTP: DELETE na komputerze lokalnym przy użyciu dowolnego klienta REST. Powinno to dać następujący wynik -
{"user1":{"name":"mahesh","password":"password1","profession":"teacher","id":1},
"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3}}