Node.js - RESTful API

什么是REST架构?

REST代表REpresentational State Transfer. REST是基于Web标准的体系结构,使用HTTP协议.它围绕资源,其中每个组件都是资源,资源由使用HTTP标准方法的公共接口访问. REST最初是由Roy Fielding在2000年引入的.

REST服务器只提供对资源和REST客户端访问的访问,并使用HTTP协议修改资源.这里每个资源都由URI/全局ID标识. REST使用各种表示来表示文本,JSON,XML等资源,但JSON是最受欢迎的.

HTTP方法

以下四种HTTP方法通常用于基于REST的架构.

  • GET : 这用于提供对资源的只读访问.

  • PUT : 这用于创建新资源.

  • DELETE : 这用于删除资源.

  • POST : 这用于更新现有资源或创建新资源.

RESTful Web服务

Web服务是用于在应用程序或系统之间交换数据的开放协议和标准的集合.以各种编程语言编写并在各种平台上运行的软件应用程序可以使用Web服务以类似于在单个计算机上的进程间通信的方式通过诸如因特网的计算机网络交换数据.这种互操作性(例如,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.URIHTTP方法POST body结果
1listUsersGETempty显示所有用户的列表.
2addUserPOSTJSON字符串添加新用户的详细信息.
3deleteUserDELETEJSON字符串删除现有用户.
4:idGETempty显示详细信息一个用户.

我假设你以硬编码的形式保留所有例子的大部分内容已经知道如何传递val使用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)
})

现在尝试使用

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

显示详细信息

现在我们将实现一个使用用户ID调用的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)
})

现在尝试使用

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

删除用户

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

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

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