Node.js - RESTful API
Что такое архитектура REST?
REST расшифровывается как REpresentational State Transfer. REST - это архитектура, основанная на веб-стандартах и использующая протокол HTTP. Он вращается вокруг ресурса, где каждый компонент является ресурсом, а доступ к ресурсу осуществляется через общий интерфейс с использованием стандартных методов HTTP. REST был впервые представлен Роем Филдингом в 2000 году.
Сервер REST просто предоставляет доступ к ресурсам, а клиент REST получает доступ и изменяет ресурсы с помощью протокола HTTP. Здесь каждый ресурс идентифицируется с помощью URI / глобальных идентификаторов. REST использует различные представления для представления ресурсов, таких как текст, JSON, XML, но JSON является наиболее популярным.
HTTP методы
Следующие четыре метода HTTP обычно используются в архитектуре на основе REST.
GET - Используется для предоставления доступа к ресурсу только для чтения.
PUT - Используется для создания нового ресурса.
DELETE - Используется для удаления ресурса.
POST - Используется для обновления существующего ресурса или создания нового ресурса.
Веб-службы RESTful
Веб-сервис - это набор открытых протоколов и стандартов, используемых для обмена данными между приложениями или системами. Программные приложения, написанные на различных языках программирования и работающие на различных платформах, могут использовать веб-службы для обмена данными через компьютерные сети, такие как Интернет, аналогично межпроцессному взаимодействию на одном компьютере. Эта совместимость (например, связь между приложениями Java и Python или Windows и Linux) обусловлена использованием открытых стандартов.
Веб-службы, основанные на архитектуре REST, известны как веб-службы RESTful. Эти веб-службы используют методы HTTP для реализации концепции архитектуры REST. Веб-служба RESTful обычно определяет URI, унифицированный идентификатор ресурса, службу, которая предоставляет представление ресурсов, такое как JSON и набор методов HTTP.
Создание RESTful для библиотеки
Предположим, у нас есть база данных на основе JSON пользователей, имеющих следующих пользователей в файле 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
}
}
Основываясь на этой информации, мы собираемся предоставить следующие RESTful API.
Sr. No. | URI | HTTP метод | Тело POST | Результат |
---|---|---|---|---|
1 | listUsers | ПОЛУЧИТЬ | пустой | Показать список всех пользователей. |
2 | Добавить пользователя | ПОСЛЕ | Строка JSON | Добавьте данные нового пользователя. |
3 | deleteUser | УДАЛЯТЬ | Строка JSON | Удалить существующего пользователя. |
4 | :Я бы | ПОЛУЧИТЬ | пустой | Показать сведения о пользователе. |
Я сохраняю большую часть всех примеров в виде жесткого кодирования, предполагая, что вы уже знаете, как передавать значения из внешнего интерфейса с помощью Ajax или данных простой формы и как их обрабатывать с помощью экспресс Request объект.
Список пользователей
Давайте реализуем наш первый RESTful API listUsers используя следующий код в файле 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)
})
Теперь попробуйте получить доступ к определенному API, используя URL: http://127.0.0.1:8081/listUsers и HTTP-метод: GET на локальном компьютере с помощью любого клиента REST. Это должно дать следующий результат -
Вы можете изменить данный IP-адрес, когда поместите решение в производственную среду.
{
"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
}
}
Добавить пользователя
Следующий API покажет вам, как добавить нового пользователя в список. Ниже приводится подробная информация о новом пользователе -
user = {
"user4" : {
"name" : "mohit",
"password" : "password4",
"profession" : "teacher",
"id": 4
}
}
Вы можете принять тот же ввод в форме JSON с использованием вызова Ajax, но с точки зрения обучения мы жестко запрограммировали его здесь. Ниже приводитсяaddUser API для нового пользователя в базе данных -
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)
})
Теперь попробуйте получить доступ к определенному API, используя URL-адрес: http://127.0.0.1:8081/addUser и HTTP-метод: POST на локальном компьютере с помощью любого клиента REST. Это должно дать следующий результат -
{
"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}
}
Показать детали
Теперь мы реализуем API, который будет вызываться с использованием идентификатора пользователя, и он будет отображать детали соответствующего пользователя.
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)
})
Теперь попробуйте получить доступ к определенному API, используя URL: http://127.0.0.1:8081/2 и HTTP-метод: GET на локальном компьютере с помощью любого клиента REST. Это должно дать следующий результат -
{"name":"suresh","password":"password2","profession":"librarian","id":2}
Удалить пользователя
Этот API очень похож на API addUser, где мы получаем входные данные через req.body, а затем на основе идентификатора пользователя удаляем этого пользователя из базы данных. Чтобы упростить нашу программу, мы предполагаем, что собираемся удалить пользователя с 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)
})
Теперь попробуйте получить доступ к определенному API, используя URL-адрес: http://127.0.0.1:8081/deleteUser и HTTP-метод: DELETE на локальном компьютере с помощью любого клиента REST. Это должно дать следующий результат -
{"user1":{"name":"mahesh","password":"password1","profession":"teacher","id":1},
"user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3}}