本質上是一樣的東西,只是一個是在 request 前執行、一個是在收到 response 後執行,分別舉兩個實際運用例子。
用 javascript 寫
用於製作 signature,在串接 webhook 時,對方可能有提供 signature 給我們做驗證,而大部分時候會是把 request body 或部分 request body,用一個專屬於我們的 key 做加密成為一個 signature,所以每次發送內容不同,signature 就不同。但每次要另外在其他地方做完 signature 再回填 postman 太累了,這時候就可以利用 pre-request script!在每次送 request 前,執行腳本產生 signature~
// 假設 signature 規則為 signature = HmacSHA256(request_body, secret)
// 讀取環境變數 secret
var secret = pm.environment.get("secret");
// 讀取環境變數 request body
var body = request.data;
// 製作 sugnature
var signature = CryptoJS.HmacSHA256(body, secret).toString();
// 回寫環境變數 signature
pm.environment.set("signature", signature);
故名思義,可以用來驗證收到的 response 是否符合預期,但除此之外,我自己滿常用的是把 response 的內容再存成環境變數。例如在串接購物 API 時,可能會有一支下訂的 API 和一支查訂單狀態的 API;前者下定成功後會回傳訂單編號,而後者需要帶入訂單編號查詢。
試想,如果每次要查剛剛下訂的單都要去匡選複製編號再貼到查訂單的 API 是不是很累?這時侯設定環境變數order_id
,然後在每次下訂成功後都自動更新order_id
就不用一直去複製貼上了~
假設下定成功回傳的訊息是這樣,我們想把 order_id
存起來
{
"code": 200,
"message": "success",
"result": {
"order_id": "0000-0000-0000-00000000",
"price": 200.00,
"currency": "USD",
"timestamp": "2021-09-09"
}
}
var resp = pm.response.json();
if (resp.code !== 200) {
console.error("API 執行失敗");
return;
}
pm.environment.set("order_id", resp.result.order_id);