📜  Node.js-RESTful API

📅  最后修改于: 2020-11-03 10:11:59             🧑  作者: Mango


什么是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。

Sr.No. URI HTTP Method POST body Result
1 listUsers GET empty Show list of all the users.
2 addUser POST JSON String Add details of new user.
3 deleteUser DELETE JSON String Delete an existing user.
4 :id GET empty Show details of a user.

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

列出用户

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

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

现在尝试使用URL访问定义的API :http://127.0.0.1:8081/listUsersHTTP方法:使用任何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
   }
}

您可以使用Ajax调用以JSON形式接受相同的输入,但是出于教学的观点,我们在这里对其进行了硬编码。以下是数据库中新用户的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)
})

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

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

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

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

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

删除用户

此API与addUser API非常相似,在addUser API中,我们通过req.body接收输入数据,然后根据用户ID从数据库中删除该用户。为了简化程序,我们假设要删除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)
})

现在,尝试使用任何REST客户端使用URL访问定义的API :http://127.0.0.1:8081/deleteUserHTTP方法:DELETE 。这应该产生以下结果-

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