Node.js RESTful API

Что такое REST?

REST (Representational State Transfer) — это архитектурный стиль программного обеспечения, предложенный доктором Роем Филдингом в его докторской диссертации в 2000 году.

Representational State Transfer — это набор архитектурных ограничений и принципов. Приложения или проекты, удовлетворяющие этим ограничениям и принципам, являются RESTful. Обратите внимание, что REST — это стиль проектирования, а не стандарт. REST обычно основан на использовании существующих, широко распространённых протоколов и стандартов, таких как HTTP, URI, XML (подмножество Standard Generalized Markup Language) и HTML (приложение Standard Generalized Markup Language). REST обычно использует формат данных JSON.

Методы HTTP

Ниже приведены четыре метода базовой архитектуры REST:
  • GET- Используется для получения данных.

  • PUT- Используется для обновления или добавления данных.

  • DELETE- Используется для удаления данных.

  • POST- Используется для добавления данных.


RESTful веб-сервисы

Веб-сервис — это независимое от платформы, слабо связанное, самодостаточное, программируемое веб-приложение. Он использует открытый стандарт XML (подмножество Standard Generalized Markup Language) для описания, публикации, обнаружения, координации и настройки этих приложений, а также применяется для разработки распределённых, взаимодействующих приложений.

Веб-сервисы, основанные на архитектуре REST, являются RESTful.

Благодаря своей легковесности и возможности передачи данных напрямую по HTTP, RESTful-подход к веб-сервисам стал наиболее распространённой альтернативой. Клиенты могут быть реализованы на различных языках (таких как программы на Java, Perl, Ruby, Python, PHP и Javascript [включая Ajax]).

Доступ к RESTful веб-сервисам обычно осуществляется автоматизированными клиентами или приложениями, действующими от имени пользователей. Однако простота таких сервисов позволяет пользователям взаимодействовать с ними напрямую, создавая GET URL в веб-браузере и читая возвращаемое содержимое.

Для получения дополнительной информации см.:Подробное объяснение архитектуры RESTful


Создание 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:

Порядковый номерURIHTTP-методСодержимое запросаРезультат
1listUsersGETПустоОтобразить список всех пользователей
2addUserPOSTСтрока JSONДобавить нового пользователя
3deleteUserDELETEСтрока JSONУдалить пользователя
4:idGETПустоПоказать подробную информацию о пользователе

Получить список пользователей:

В следующем коде мы создаём RESTful APIlistUsers, используемый для чтения списка информации о пользователях. Код файла 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("应用实例,访问地址为 http://%s:%s", host, port)

})

Затем выполните следующую команду:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

Откройте http://127.0.0.1:8081/listUsers в браузере, и результат будет следующим:

{
   "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 APIaddUser, используемый для добавления данных нового пользователя. Код файла 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.get('/addUser', function (req, res) {
   // 读取已存在的数据
   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("应用实例,访问地址为 http://%s:%s", host, port)

})

Затем выполните следующую команду:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

Перейдите по адресу http://127.0.0.1:8081/addUser в браузере, и результат будет следующим:

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

Показать сведения о пользователе

В следующем коде мы создаём RESTful API:id (идентификатор пользователя), используемый для чтения подробной информации об указанном пользователе. Код файла server.js выглядит следующим образом:

var express = require('express');
var app = express();
var fs = require("fs");

app.get('/:id', function (req, res) {
   // 首先我们读取已存在的用户
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
       data = JSON.parse( data );
       var user = data["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("应用实例,访问地址为 http://%s:%s", host, port)

})

Затем выполните следующую команду:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

Перейдите по адресу http://127.0.0.1:8081/2 в браузере, и результат будет следующим:

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

Удалить пользователя

В следующем коде мы создаём RESTful APIdeleteUser, используемый для удаления подробной информации об указанном пользователе. В следующем примере идентификатор пользователя равен 2. Код файла server.js выглядит следующим образом:

var express = require('express');
var app = express();
var fs = require("fs");

var id = 2;

app.get('/deleteUser', function (req, res) {

   // First read existing users.
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
       data = JSON.parse( data );
       delete data["user" + id];
       
       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("应用实例,访问地址为 http://%s:%s", host, port)

})

Затем выполните следующую команду:

$ node server.js 
应用实例,访问地址为 http://0.0.0.0:8081

Перейдите по адресу http://127.0.0.1:8081/deleteUser в браузере, и результат будет следующим:

{ user1:
   { name: 'mahesh',
     password: 'password1',
     profession: 'teacher',
     id: 1 },
  user3:
   { name: 'ramesh',
     password: 'password3',
     profession: 'clerk',
     id: 3 } 
}
Другие расширения