iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Modern Web

工作後才知道的後端 30 件小事系列 第 17

Postman pre-request script & tests

本質上是一樣的東西,只是一個是在 request 前執行、一個是在收到 response 後執行,分別舉兩個實際運用例子。

用 javascript 寫

Pre-request

用於製作 signature,在串接 webhook 時,對方可能有提供 signature 給我們做驗證,而大部分時候會是把 request body 或部分 request body,用一個專屬於我們的 key 做加密成為一個 signature,所以每次發送內容不同,signature 就不同。但每次要另外在其他地方做完 signature 再回填 postman 太累了,這時候就可以利用 pre-request script!在每次送 request 前,執行腳本產生 signature~

  • Example of signing:
// 假設 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);

Tests

故名思義,可以用來驗證收到的 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"
    }
}
  • Set env variable:
var resp = pm.response.json();

if (resp.code !== 200) {
    console.error("API 執行失敗");
    return;
}

pm.environment.set("order_id", resp.result.order_id);

上一篇
Laravel Middleware 實作 Signature Verification
下一篇
如何讓 Laravel Eloquent 支援 composite key
系列文
工作後才知道的後端 30 件小事19

尚未有邦友留言

立即登入留言