手记

无涯教程:Node.js - Express RESTFul API

REST是基于Web标准的体系结构,并使用HTTP协议,它围绕资源展开,其中每个组件都是资源,并且使用HTTP标准方法通过公共接口访问资源。 REST由Roy Fielding于2000年首次提出。

HTTP方法

在基于REST的体系结构中,通常使用以下四种HTTP方法。

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

  • PUT         - 用于创建新资源。

  • DELETE   - 用于删除资源。

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

创建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方法POST正文输出
1listUsersGET显示所有用户的列表。
2addUserPOSTJSON字符串添加新用户的详细信息。
3deleteUserDELETEJSON字符串删除现有用户。
4:idGET显示用户的详细信息。

listUsers路由

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

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

现在,尝试使用任何REST客户端在本地计算机上使用 URL:http://127.0.0.1:8081/listUsers 和 HTTP方法:GET 访问已定义的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
   }
}

addUser路由

以下API将向您展示如何在列表中添加新用户,以下是新用户的详细信息-

user={
   "user4" : {
      "name" : "mohit",
      "password" : "password4",
      "profession" : "teacher",
      "id": 4
   }}

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

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

现在,尝试使用任何REST客户端在本地计算机上使用 URL:http://127.0.0.1:8081/addUser 和 HTTP方法: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}
}

Show Detail路由

现在,我们将实现一个API,该API将使用用户ID进行调用,并显示相应用户的详细信息。

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

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

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

Delete User路由

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

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:http://127.0.0.1:8081/deleteUser 和 HTTP方法:DELETE 访问已定义的API。

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


0人推荐
随时随地看视频
慕课网APP