Node.js - RESTful API


什么是 REST 架构?

REST 代表表述性状态转移。REST 是基于 Web 标准的架构并使用 HTTP 协议。它围绕资源,其中每个组件都是一个资源,并且资源可以通过使用 HTTP 标准方法的公共接口进行访问。REST 是由 Roy Fielding 于 2000 年首次提出的。

REST 服务器仅提供对资源的访问,REST 客户端使用 HTTP 协议访问和修改资源。这里每个资源都由 URI/全局 ID 来标识。REST 使用各种表示形式来表示资源,例如文本、JSON、XML,但 JSON 是最流行的一种。

HTTP 方法

基于 REST 的架构中常用以下四种 HTTP 方法。

  • GET - 用于提供对资源的只读访问。

  • PUT - 这用于创建新资源。

  • DELETE - 用于删除资源。

  • POST - 用于更新现有资源或创建新资源。

RESTful Web 服务

Web 服务是用于在应用程序或系统之间交换数据的开放协议和标准的集合。用各种编程语言编写并在各种平台上运行的软件应用程序可以使用 Web 服务通过计算机网络(例如 Internet)交换数据,其方式类似于单个计算机上的进程间通信。这种互操作性(例如,Java 和 Python、或 Windows 和 Linux 应用程序之间的通信)是由于开放标准的使用。

基于 REST 架构的 Web 服务称为 RESTful Web 服务。这些 Web 服务使用 HTTP 方法来实现 REST 架构的概念。RESTful Web 服务通常定义一个 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。

先生。 统一资源标识符 HTTP方法 发布正文 结果
1 列出用户 得到 空的 显示所有用户的列表。
2 添加用户 邮政 JSON 字符串 添加新用户的详细信息。
3 删除用户 删除 JSON 字符串 删除现有用户。
4 :ID 得到 空的 显示用户的详细信息。

我将所有示例的大部分内容以硬编码的形式保留,假设您已经知道如何使用 Ajax 或简单表单数据从前端传递值以及如何使用快速 Request 对象处理它们

列出用户

让我们在 server.js 文件中使用以下代码来实现我们的第一个 RESTful API listUsers -

服务器.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)
})

现在尝试使用URL:http://127.0.0.1:8081/listUsersHTTP 方法:使用任何 REST 客户端在本地计算机上 GET 访问定义的 API。这应该产生以下结果 -

当您将解决方案投入生产环境时,您可以更改给定的 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
   }
}

您可以使用 Ajax 调用接受 JSON 形式的相同输入,但出于教学的角度,我们在这里对其进行硬编码。以下是数据库中新用户的addUser API -

服务器.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)
})

现在尝试使用URL:http://127.0.0.1:8081/addUserHTTP 方法:使用任何 REST 客户端在本地计算机上 POST访问定义的 API 。这应该产生以下结果 -

{
   "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,该 API 将使用用户 ID 进行调用,并显示相应用户的详细信息。

服务器.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)
})

现在尝试使用URL:http://127.0.0.1:8081/2HTTP 方法:使用任何 REST 客户端在本地计算机上 GET访问定义的 API 。这应该产生以下结果 -

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

删除用户

该 API 与 addUser API 非常相似,我们通过 req.body 接收输入数据,然后根据用户 ID 从数据库中删除该用户。为了使程序简单,我们假设要删除 ID 为 2 的用户。

服务器.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)
})

现在尝试使用URL:http://127.0.0.1:8081/deleteUserHTTP 方法:使用任何 REST 客户端在本地计算机上删除来访问定义的 API。这应该产生以下结果 -

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