Postman 透過 Pre-request Script 取得 Token 後呼叫 API

在 2017 年寫了一篇 「使用 Postman 取得 Token 打另一隻 API」,而那篇使用的方式是透過 Runner 的方式來達到取得 Token 再來打 API,其實還是有點麻煩,因為無法直接在單一一個 Collection 下 Send 就好。

而這邊來說一下如何直接在單一一個 Collection 下 Send 來取得 Token 並且呼叫 API 。

Pre-request Script

在 Postman 裡,每個 Collection 都有自己的 Pre-request Script ,而這個 Script 執行的時間點顧名思義就是在此 Collection Send 之前會先處理的 Script ,因此現在主要想要先取得 Token 後再做 Send ,所以就要把取得 Token 的動作放在 Pre-request Script 來處理了。

Token API

首先要先確認 Token API 的呼叫方式以及回傳格式。

此範列以 form-data 方式 呼叫 signin ,並傳送 user、password ,回傳 JSON 資料,且有 token 的參數。

建立取得會員資料 API

此 API 將取得會員資料,但必需要先有 Token 才能取得,會判斷 Token 是否有效並回傳該會員資料。

我們可以先手動將 Token Copy 到 Headers 的 Authorization ,並且送出確認 API 是可以正常

取得 Token Script

Postman 提供了 sendRequest 這個方法,讓我們可以在利用這個方法來先呼叫 Token API 來取得 Token 。

開始在 Pre-request Script 撰寫 Script 來自動取得 Token 並讓 Authorization 自動取讀。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ======== 取得 Token =======
pm.sendRequest({
url: 'http://laraauth.local/member/signin',
method: 'POST',
body: {
mode: 'formdata',
formdata: [
{key: "name", value: "duncan"},
{key: "password", value: "123123123"},
]
}
}, function(err, response) {
const jsonResponse = response.json();
pm.environment.set("signin_token", jsonResponse.token);
});

sendRequest 的使用方式蠻簡單的,跟 jQuery 的 $.ajax 有點像。

  • url:Token API 網址
  • method:以 POST 的方式傳送
  • body:傳送參數
    • mode:以 formdata 的格式傳送
    • formdata:傳送參數值設定

而回傳為 JSON 格式,所以在 response 後以 .json() 的方法解析 JSON ,並將回傳的 Token 儲存到 Postman 的環境變數裡。

Authorization 取讀環境變數

上面 Pre-request Script 裡已經將取得的 Token 以 signin_token 名稱儲存到環境變數裡,現在可以先設定讓 Authorization 取讀環境變數。

以雙大刮號包著變數名稱,這樣在 Send 出去時 Postman 會去讀取環境變數。

這邊故意將傳送的 Token 以 signin_token 變數回傳,來表示每次有取得到新的 Token 。

總結

先透過 Pre-request Script 呼叫可以取得 Token 的 API ,並且將 Token 存到環境變數,然後在需要傳送 Token 的地方去設定讀取環境變數,這樣就可以達到在單一一個 Collection 裡做到達要 Token 才能呼叫的 API 了。

2018-04-02_01-11-33