在前面章節中,曾介紹過使用Postman Console
來輸出偵錯的資訊,但有時候會希望能把這些資訊或是請求的結果輸出成檔案,用來統一蒐集紀錄進而分析或統計,也可以用來自動輸出生成Mock API需要的範例資料。可惜的是,無法透過Postman提供的Tests
、Pre-request
直接輸出檔案,因為沒有任何API能夠做到,加上Postman的沙箱環境沒有我們硬碟的存取權限,所以必須透過間接的方式 - local server
本地伺服器來達成。
第一步我們需要先建立起一個本地伺服器,它的作用是接收需要被記錄的資訊,然後進行輸出檔案,而建立本地的HTTP服務器有許多種方式,例如透過docker跑apache2、 nginx等等,但由於這邊的需求很單純,只需要收資料並記錄,所以官方也有給範例,可以很快的透過Node.js
來建立。
local_server
,並開啟命令提示字元進入此資料夾npm
來安裝需要的套件,在命令提示字元下輸入:
npm install express fs body-parser
這樣會在當前資料夾local_server
下把相關的依賴都安裝到node_modules
這個資料夾,其中主要會使用到套件
script.js
,也可以從這裡直接下載,放到當前資料夾下
var express = require('express');
var fs = require('fs');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json()); // Body parser use JSON data
app.post('/launches', function(req, res) {
var outputFilename = './spaceReport.json'; // path of the file to output
fs.writeFileSync(outputFilename, JSON.stringify(JSON.parse(req.body.payload), null, 4)); // write to the file system
res.send('Saved to ' + outputFilename);
});
var port = 3000;
app.listen(port);
console.log('Express started on port %d ...', port);
node script.js
從程式碼可以看到express會監聽3000 port來的請求,所以這時候打開瀏覽器前往http://localhost:3000
,其實可以看到頁面會顯示"Cannot GET /",這是因為我們在程式碼裡面只有開了POST /launches
的API,負責把透過此API送過來的資料讀出來,然後寫到一個叫做spaceReport.json
的檔案裏面。至此,我們已經建立好一個本地伺服器了,所以接下面我們要經由今天的挑戰內容來體驗如何與Postman進行串接。在挑戰開始之前,記得先把 Day 15: Write to file 複製到自己的工作區內,並看一下關於今天挑戰的文件說明。
今日的挑戰目的是要建立一個請求,然後把該請求的回應內容存成檔案,步驟如下
Write to file
下新增請求,並重新命名為spacex
,去GET https://api.spacexdata.com/v4/launches/latest
取的資料。Tests
分頁下而不是Pre-request
來撰寫腳本,這邊就是串接主要執行的工作了
pm.sendRequest({
url: 'http://localhost:3000/launches',
method: 'POST',
header: 'Content-Type:application/x-www-form-urlencoded',
body: {
mode: 'urlencoded',
urlencoded: `payload=${pm.response.text()}`
}
}, function (err, res) {
console.log(res)
})
這個腳本重點在於pm.response
以及pm.sendRequest
,前者用來讀取回應的內容,後者用來另外發出另一個請求,請求的API就是前面我們架設的本地伺服器。Send
取的回應後,會執行到Tests
剛定義的腳本,這邊會把回應內容轉發給本地伺服器,最後本地伺服器會把收到的內容寫到檔案spaceReport.json
,可以打開檔案看一下是不是就是GET
取得的回應。到這邊就可以進行Submit
來通過今天的挑戰了。今天我們實際架了一個本地伺服器,用以跟Postman進行串接,也就是說我們也能夠進一步地擴充伺服器的API,去滿足不同的用途,例如可以讓Postman每個請求結束後都去通知local,讓local來進行統計每日API次數等等。也可以讓local收到資料後,根據商業邏輯去分門別類,讓不同檔案有不同的意義。
那麼今天就到這裡,我們明天見~