[REST] REST API 的 client 程式開發 (node-rest-client)
在之前的文章中, 我們介紹了如何建立一個 json-server,
通常, 這樣的架構是為了作為 RESTful API 的介面,
在文章的安裝步驟中, 事實上, 有暗示此 JSON server 是以 NodeJs 的架構撰寫,
考慮到 NodeJS 對網頁端的支援, 也的確是一個合適的選擇.
傳送到 json-server 的資訊將被放到一個 .json 文件中暫存,
然而, 考慮到 json-server 並非設計作為資料庫使用,
當暫存資料過大時, 就會讓讀取/寫入失去效率,
因此, 我們需要寫一隻程式, 從 json-server 中取值, 處理, 再刪除數值,
架構如下圖所示:
當然, 更好一點的架構是直接用 NodeJs 來架設 REST API Server,
但考慮到平台的熟悉程度, 還是先用寫好的套裝程式來改,
應該比較穩定一些, 雖然犧牲不少效率...
在實作範例中, 我們使用 node-rest-client 作為開發套件,
node-rest-client 建立在 NodeJs 之上, 可以參考:
https://www.npmjs.com/package/node-rest-client
在其官網上, 有許多範例, 因此就不再多述如何安裝 node-rest-client,
以及每一個 REST 函數的呼叫,
在進入程式之前, 只提醒兩件事情:
因此, 本程式的目標流程有以下三個:
讀取 json 總數 => 取出最後一個 json 物件 => 刪除最後一個 json 物件
以下是所實作的程式:
以下是執行的成果:
通常, 這樣的架構是為了作為 RESTful API 的介面,
在文章的安裝步驟中, 事實上, 有暗示此 JSON server 是以 NodeJs 的架構撰寫,
考慮到 NodeJS 對網頁端的支援, 也的確是一個合適的選擇.
傳送到 json-server 的資訊將被放到一個 .json 文件中暫存,
然而, 考慮到 json-server 並非設計作為資料庫使用,
當暫存資料過大時, 就會讓讀取/寫入失去效率,
因此, 我們需要寫一隻程式, 從 json-server 中取值, 處理, 再刪除數值,
架構如下圖所示:
資料處理的架構
當然, 更好一點的架構是直接用 NodeJs 來架設 REST API Server,
但考慮到平台的熟悉程度, 還是先用寫好的套裝程式來改,
應該比較穩定一些, 雖然犧牲不少效率...
在實作範例中, 我們使用 node-rest-client 作為開發套件,
node-rest-client 建立在 NodeJs 之上, 可以參考:
https://www.npmjs.com/package/node-rest-client
在其官網上, 有許多範例, 因此就不再多述如何安裝 node-rest-client,
以及每一個 REST 函數的呼叫,
在進入程式之前, 只提醒兩件事情:
- NodeJs 有原生的平行化架構, 因此, 當使用多個 client 時,
要注意每個 client 的執行並不會依照程式的順序. - 相同的, 由於平行化架構, global variable 的存取順序可能和預期不同,
要自己想好順序, 並包在同一個 client 中.
因此, 本程式的目標流程有以下三個:
讀取 json 總數 => 取出最後一個 json 物件 => 刪除最後一個 json 物件
以下是所實作的程式:
var Client = require('node-rest-client').Client;
var client = new Client();
// get the number of json object
// refer to the "slice" method in the json-server
client.get("http://localhost:3000/posts?_start=1&_end=100", function (data, response) {
// parsed response body as js object
// console.log(data);
// raw response
// console.log(response);
var totalCount = 100;
totalCount = response.headers["x-total-count"];
console.log("check: " + totalCount);
// GET the last json report
var getClient = new Client();
var getURL = "http://localhost:3000/comments/" + totalCount;
console.log("GET URL: " + getURL);
getClient.get(getURL, function (getData, getResponse) {
console.log(getData);
// do something here
// collect the information from json format
// save the information into SQL database
var deleteClient = new Client();
deleteClient.delete(getURL, function (delData, delResponse) {
console.log("DELETE URL: " + getURL);
});
});
});
以下是執行的成果:
$ node TestDB.js
check: 1
GET URL: http://localhost:3000/comments/1
{ id: 1, body: 'some comment', postId: 1 }
DELETE URL: http://localhost:3000/comments/1
留言
張貼留言