
- Node.js 教程
- Node.js - 首頁
- Node.js - 簡介
- Node.js - 環境設定
- Node.js - 第一個應用程式
- Node.js - REPL 終端
- Node.js - 命令列選項
- Node.js - 包管理器 (NPM)
- Node.js - 回撥函式概念
- Node.js - 上傳檔案
- Node.js - 傳送電子郵件
- Node.js - 事件
- Node.js - 事件迴圈
- Node.js - 事件發射器
- Node.js - 偵錯程式
- Node.js - 全域性物件
- Node.js - 控制檯
- Node.js - 程序
- Node.js - 應用程式擴充套件
- Node.js - 打包
- Node.js - Express 框架
- Node.js - RESTFul API
- Node.js - 緩衝區
- Node.js - 流
- Node.js - 檔案系統
- Node.js MySQL
- Node.js - MySQL 入門
- Node.js - MySQL 建立資料庫
- Node.js - MySQL 建立表
- Node.js - MySQL 插入資料
- Node.js - MySQL 從表中選擇資料
- Node.js - MySQL 使用 Where 條件
- Node.js - MySQL 使用 Order By 排序
- Node.js - MySQL 刪除資料
- Node.js - MySQL 更新資料
- Node.js - MySQL 聯接
- Node.js MongoDB
- Node.js - MongoDB 入門
- Node.js - MongoDB 建立資料庫
- Node.js - MongoDB 建立集合
- Node.js - MongoDB 插入資料
- Node.js - MongoDB 查詢資料
- Node.js - MongoDB 查詢
- Node.js - MongoDB 排序
- Node.js - MongoDB 刪除資料
- Node.js - MongoDB 更新資料
- Node.js - MongoDB 限制結果數量
- Node.js - MongoDB 聯接
- Node.js 模組
- Node.js - 模組
- Node.js - 內建模組
- Node.js - 實用程式模組
- Node.js - Web 模組
- Node.js 有用資源
- Node.js - 快速指南
- Node.js - 有用資源
- Node.js - 討論
Node.js - RESTful API
使用 ExpressJS 的 Node.js 應用程式非常適合構建 REST API。在本章中,我們將解釋什麼是 REST(也稱為 RESTFul)API,並構建一個基於 Node.js 的 Express.js REST 應用程式。我們還將使用 REST 客戶端來測試 REST API。
API 是應用程式程式設計介面的縮寫。介面通常指的是兩個隔離且獨立的環境之間的共同交匯點。程式設計介面是兩個軟體應用程式之間的介面。術語 REST API 或 RESTFul API 用於 Web 應用程式,它透過 Internet 將其資源公開給其他 Web/移動應用程式,方法是定義一個或多個端點,客戶端應用程式可以訪問這些端點以對主機資源執行讀/寫操作。
REST 架構已成為構建 API 的事實標準,開發人員更喜歡它而不是其他技術,例如 RPC(代表遠端過程呼叫)和 SOAP(代表簡單物件訪問協議)。
什麼是 REST 架構?
REST 代表表現層狀態轉移。REST 是一種眾所周知的軟體架構風格。它定義了 Web 應用程式的架構應如何執行。它是一種基於資源的架構,其中 REST 伺服器託管的所有內容(檔案、影像或資料庫表中的行)都是資源,具有多種表示形式。REST 最初由 Roy Fielding 於 2000 年提出。
REST 建議某些架構約束。
統一介面
無狀態性
客戶端-伺服器
可快取性
分層系統
按需程式碼
以下是 REST 約束的優勢:
可擴充套件性
簡單性
可修改性
可靠性
可移植性
可見性
REST 伺服器提供對資源的訪問,而 REST 客戶端使用 HTTP 協議訪問和修改資源。這裡每個資源都由 URI/全域性 ID 標識。REST 使用各種表示形式來表示資源,例如文字、JSON、XML,但 JSON 是最流行的一種。
HTTP 方法
以下四種 HTTP 方法通常用於基於 REST 的架構。
POST 方法
HTTP 請求中的 POST 動詞表示將在伺服器上建立一個新的資源。它對應於 CRUD(建立、讀取、更新和刪除)術語中的 CREATE 操作。要建立新資源,您需要某些資料,它作為資料標頭包含在請求中。
POST 請求示例:
HTTP POST http://example.com/users HTTP POST http://example.com/users/123
GET 方法
GET 操作的目的是檢索伺服器上現有的資源並將其 XML/JSON 表示形式作為響應返回。它對應於 CRUD 術語中的 READ 部分。
GET 請求示例:
HTTP GET http://example.com/users HTTP GET http://example.com/users/123
PUT 方法
客戶端使用 HTTP PUT 方法更新現有資源,對應於 CRUD 中的 UPDATE 部分)。更新所需的資料包含在請求正文中。
PUT 請求示例:
HTTP PUT http://example.com/users/123 HTTP PUT http://example.com/users/123/name/Ravi
DELETE 方法
DELETE 方法(顧名思義)用於刪除伺服器上的一個或多個資源。成功執行後,將傳送 HTTP 響應程式碼 200(OK)。
DELETE 請求示例:
HTTP DELETE http://example.com/users/123 HTTP DELETE http://example.com/users/123/name/Ravi
RESTful Web 服務
基於 REST 架構的 Web 服務稱為 RESTful Web 服務。這些 Web 服務使用 HTTP 方法來實現 REST 架構的概念。RESTful Web 服務通常定義一個 URI(統一資源識別符號)服務,該服務提供 JSON 等資源表示形式和一組 HTTP 方法。
為圖書館建立 RESTful API
假設我們有一個基於 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 } }
我們的 API 將公開以下端點,以便客戶端對 users.json 檔案執行 CRUD 操作,該檔案是伺服器上的資源集合。
序號 | URI | HTTP 方法 | POST 正文 | 結果 |
---|---|---|---|---|
1 | / | GET | 空 | 顯示所有使用者的列表。 |
2 | / | POST | JSON 字串 | 新增新使用者的詳細資訊。 |
3 | /:id | DELETE | JSON 字串 | 刪除現有使用者。 |
4 | /:id | GET | 空 | 顯示使用者詳細資訊。 |
5 | /:id | PUT | JSON 字串 | 更新現有使用者 |
列出使用者
讓我們在 index.js 檔案中使用以下程式碼實現 RESTful API 中的第一個路由,以列出所有使用者
var express = require('express'); var app = express(); var fs = require("fs"); app.get('/', function (req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { res.end( data ); }); }) var server = app.listen(5000, function () { console.log("Express App running at http://127.0.0.1:5000/"); })
要測試此端點,您可以使用 REST 客戶端(如 Postman 或 Insomnia)。在本章中,我們將使用 Insomnia 客戶端。
從命令提示符執行 index.js,然後啟動 Insomnia 客戶端。選擇 GET 方法並輸入 https://:5000/ URL。users.json 中所有使用者的列表將顯示在右側的響應面板中。

您還可以使用 CuRL 命令列工具傳送 HTTP 請求。開啟另一個終端併為上述 URL 發出 GET 請求。
C:\Users\mlath>curl https://:5000/ { "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 端點 /:id,該端點將使用使用者 ID 呼叫,並將顯示相應使用者的詳細資訊。
在 index.js 檔案中新增以下方法:
app.get('/:id', function (req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { var users = JSON.parse( data ); var user = users["user" + req.params.id] res.end( JSON.stringify(user)); }); })
在 Insomnia 介面中,輸入 https://:5000/2 併發送請求。

您也可以使用以下 CuRL 命令顯示 user2 的詳細資訊:
C:\Users\mlath>curl https://:5000/2 {"name":"suresh","password":"password2","profession":"librarian","id":2}
新增使用者
以下 API 將向您展示如何在列表中新增新使用者。以下是新使用者的詳細資訊。如前所述,您必須已在應用程式資料夾中安裝了 body-parser 包。
var bodyParser = require('body-parser') app.use( bodyParser.json() ); app.use(bodyParser.urlencoded({ extended: true })); app.post('/', function (req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { var users = JSON.parse( data ); var user = req.body.user4; users["user"+user.id] = user res.end( JSON.stringify(users)); }); })
要透過 Insomnia 傳送 POST 請求,請將 BODY 選項卡設定為 JSON,並以 JSON 格式輸入使用者資料,如下所示

您將獲得四個使用者的 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 }, "user4": { "name": "mohit", "password": "password4", "profession": "teacher", "id": 4 } }
刪除使用者
以下函式從 URL 讀取 ID 引數,從讀取 users.json 檔案獲得的列表中找到使用者,並刪除相應使用者。
app.delete('/:id', function (req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { data = JSON.parse( data ); var id = "user"+req.params.id; var user = data[id]; delete data[ "user"+req.params.id]; res.end( JSON.stringify(data)); }); })
在 Insomnia 中選擇 DELETE 請求,輸入 https://:5000/2 併發送請求。ID=3 的使用者將被刪除,其餘使用者將在響應面板中列出

輸出
{ "user1": { "name": "mahesh", "password": "password1", "profession": "teacher", "id": 1 }, "user2": { "name": "suresh", "password": "password2", "profession": "librarian", "id": 2 } }
更新使用者
PUT 方法使用伺服器修改現有資源。以下 app.put() 方法從 URL 讀取要更新的使用者 ID,以及 JSON 正文中的新資料。
app.put("/:id", function(req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { var users = JSON.parse( data ); var id = "user"+req.params.id; users[id]=req.body; res.end( JSON.stringify(users)); }) })
在 Insomnia 中,為 https://:5000/2 URL 設定 PUT 方法。

響應顯示 ID=2 的使用者的更新詳細資訊
{ "user1": { "name": "mahesh", "password": "password1", "profession": "teacher", "id": 1 }, "user2": { "name": "suresh", "password": "password2", "profession": "Cashier", "id": 2 }, "user3": { "name": "ramesh", "password": "password3", "profession": "clerk", "id": 3 } }
以下是 Node.js RESTFul API 的完整程式碼:
var express = require('express'); var app = express(); var fs = require("fs"); var bodyParser = require('body-parser') app.use( bodyParser.json() ); app.use(bodyParser.urlencoded({ extended: true })); app.get('/', function (req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { res.end( data ); }); }) app.get('/:id', function (req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { var users = JSON.parse( data ); var user = users["user" + req.params.id] res.end( JSON.stringify(user)); }); }) var bodyParser = require('body-parser') app.use( bodyParser.json() ); app.use(bodyParser.urlencoded({ extended: true })); app.post('/', function (req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { var users = JSON.parse( data ); var user = req.body.user4; users["user"+user.id] = user res.end( JSON.stringify(users)); }); }) app.delete('/:id', function (req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { data = JSON.parse( data ); var id = "user"+req.params.id; var user = data[id]; delete data[ "user"+req.params.id]; res.end( JSON.stringify(data)); }); }) app.put("/:id", function(req, res) { fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) { var users = JSON.parse( data ); var id = "user"+req.params.id; users[id]=req.body; res.end( JSON.stringify(users)); }) }) var server = app.listen(5000, function () { console.log("Express App running at http://127.0.0.1:5000/"); })