Node.js RESTful API


什麼是REST架構?

REST表示代表性狀態傳輸。REST是一種基於Web標準的架構,並使用HTTP協定。 它都是圍繞著資源,其中每一個元件是資源和一個資源是由一個共同的介面使用HTTP的標準方法獲得。REST最初是由Roy Fielding在2000年推出。

一個REST伺服器只是提供的資源和REST用戶端存取和使用HTTP協定修改的資源。這裡每個資源由URI標識的/全域性標識。其餘部分使用各個表示形式表示相同的文字,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。

S. N. URI HTTP 方法 POST 主體 結果
1 listUsers GET empty 顯示所有使用者的列表
2 addUser POST JSON String 新增新使用者的詳細資訊
3 deleteUser DELETE JSON String 刪除現有使用者
4 :id GET empty 檢視使用者的詳細

保持最全的例子部分的寫死假設的形式,你已經知道如何通過使用Ajax或簡單的表單資料,以及如何使用 express Request物件來處理前端的值。

使用者列表

讓我們用下面的程式碼在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)

})

現在嘗試使用定義的API,存取 http://127.0.0.1:8081/listUsers 在本地機器上,這將產生以下結果:

可以更改指定的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
   }
}

您可以接受JSON的使用Ajax呼叫的形式,但對於檢視相同的輸入,我們正在這裡寫死。以下是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.get('/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)

})

現在嘗試使用存取定義的API: http://127.0.0.1:8081/addUsers 在本地計算機上。這將產生以下結果:

{ 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,它會顯示相應使用者的詳細資訊。

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) {
       data = 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)

})

現在,讓我們把上述服務中使用 http://127.0.0.1:8081/2 在本地計算機上。這將產生以下結果:

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

刪除使用者

這個API是非常相似API addUser,我們接收通過req.body輸入資料,然後根據我們從資料庫中刪除該使用者的使用者ID。為了讓我們的程式簡單,我們假設我們要刪除ID為2的使用者。

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" + 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)

})

現在,讓我們把上述服務中使用 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 } 
}