От автора: что такое архитектура REST? REST означает REpresentational State Transfer. REST — это веб-стандарт, основанный на архитектуре, которая использует протокол HTTP. Она связана с обработкой ресурсов, где каждый компонент является ресурсом, и доступ к ресурсам осуществляется через общий интерфейс с использованием стандартных методов HTTP. REST был впервые представлен Роем Филдингом в 2000 году.
Сервер REST просто обеспечивает доступ к ресурсам, а клиенты REST получают доступ к ресурсам и изменяют их с помощью протокола HTTP. Здесь каждый ресурс идентифицируется с помощью URI/глобальных идентификаторов. В Node js REST использует различные представления для отображения ресурсов, таких как текст, JSON, XML, но наиболее часто используемым среди них, является JSON.
Методы HTTP
В архитектуре REST обычно используются следующие четыре метода HTTP.
GET — используется для обеспечения доступа к ресурсу только для чтения.
PUT — используется для создания нового ресурса.
DELETE — используется для удаления ресурса.
POST — используется для обновления существующего ресурса или создания нового ресурса.
Веб-службы RESTful
Веб-служба представляет собой набор открытых протоколов и стандартов, используемых для обмена данными между приложениями или системами. Программные приложения, написанные на разных языках программирования и работающие на разных платформах, могут использовать веб-службы для обмена данными через компьютерные сети, такие как Интернет, способом аналогичным, тому как осуществляется взаимодействие между различными процессами на отдельном компьютере. Эта совместимость (например, связь между Java и Python, или приложениями Windows и Linux) осуществляется благодаря использованию открытых стандартов.
Веб-службы, основанные на архитектуре REST, называются веб-службами RESTful. Эти веб-службы используют HTTP-методы для реализации концепции архитектуры REST. Веб-служба RESTful обычно определяет URI, Uniform Resource Identifier — службу, которая предоставляет представление ресурсов, такое как JSON и набор HTTP-методов.
Создание RESTful для библиотеки
Предположим у нас есть JSON на основе базы данных пользователей, содержащей следующих пользователей в файле users.json:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "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.
Во всех приведенных примерах по большей части было использовано жесткое кодирование, предполагая, что вы уже знакомы с тем, как передавать значения из front end с помощью данных Ajax или простой формы и как обрабатывать их с помощью объекта express Request.
Список пользователей
Давайте реализуем наше первое RESTful API listUsers, используя следующий код в файле server.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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 //%s:%s", host, port) }) |
Теперь попробуйте получить доступ к определенному API с помощью URL: //127.0.0.1:8081/listUsers и HTTP-метода: GET на локальном компьютере с использованием любого клиента REST. В результате вы должны получить следующее:
Вы можете изменить IP-адрес при переносе решения в рабочую среду.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "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 показано как добавить пользователя в список. Ниже приводится подробная информация о новом пользователе:
1 2 3 4 5 6 7 8 |
user = { "user4" : { "name" : "mohit", "password" : "password4", "profession" : "teacher", "id": 4 } } |
Вы можете принять те же данные с помощью вызова JSON, используя Ajax-вызов, но в целях обучения, мы используем здесь жесткое кодирование. Ниже приведен API-интерфейс addUser для добавления пользователя в базу данных. server.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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 //%s:%s", host, port) }) |
Теперь попробуйте получить доступ к определенному API с помощью URL: //127.0.0.1:8081/addUser и HTTP-метода: POST на локальном компьютере с использованием любого клиента REST. В результате вы должны получить следующее:
1 2 3 4 5 6 |
{ "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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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 //%s:%s", host, port) }) |
Теперь попытайтесь получить доступ к определенному API через URL: //127.0.0.1:8081/2 и HTTP метод: GET на локальном компьютере с использованием любого клиента REST. В результате вы должны получить следующее:
1 |
{"name":"suresh","password":"password2","profession":"librarian","id":2} |
Удаление пользователя
Этот API очень похож на API addUser, в котором мы получаем входные данные через req.body, а затем на основе идентификатора пользователя удаляем этого пользователя из базы данных. Чтобы не усложнять программу, мы предполагаем, что мы удалим пользователя с ID 2. server.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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 //%s:%s", host, port) }) |
Теперь попытайтесь получить доступ к определенному API через URL: //127.0.0.1:8081/deleteUser и HTTP метод: DELETE на локальном компьютере с использованием любого клиента REST. . В результате вы должны получить следующее:
1 2 |
{"user1":{"name":"mahesh","password":"password1","profession":"teacher","id":1}, "user3":{"name":"ramesh","password":"password3","profession":"clerk","id":3}} |
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.