この記事でやること
-
アクセストークンをもらうためのAPIをPostmanで叩き、帰ってきたアクセストークンをPostmanの環境変数を利用して永続的に保存する。
-
保存した値を、認証が必要なリクエストを送る前に動的にヘッダーにセットする。
なにが嬉しいか
Postman1がアクセストークンを保持できるので、ブラウザでいういわゆる「ログイン状態」を維持することができる。
手順
1. ログインAPI(アクセストークンをもらうためのAPI)のタブを開く
2. Testsの項目で、レスポンスヘッダーの値を受け取る。
Testsという項目は、APIのレスポンスが帰ってきたあとの処理をNode.jsベースでランタイムに書けるところ。一言で言えば、JavaScriptが書ける。
ヘッダーの値をPostmanの環境変数にセットする処理の例が以下。
const headers = responseHeaders
const ok = responseCode.code === 200
if (ok) {
pm.globals.set('uid', headers.uid)
pm.globals.set('client', headers.client)
pm.globals.set('access-token', headers['access-token'])
}
このコードは、APIから帰ってきたレスポンスのヘッダーを取得し、それをPostman上の環境変数にセットするための記述です。
素直な処理なのでわかりやすいとは思いますが、以下だけ、PostmanSandboxAPI2を利用している特殊な処理なので注意です。
pm.globals.set('uid', headers.uid)
これは一言でいえば、「Postmanの環境変数として、uidというプロパティ名で、レスポンスヘッダーのuidの値をセットします」ということです。
認証のために「uid」「client」「access-token」の三種類を利用しているアプリケーションの場合は、以下のように三種類に対する処理が必要となります。
pm.globals.set('uid', headers.uid)
pm.globals.set('client', headers.client)
pm.globals.set('access-token', headers['access-token'])
3. Testsに記述後、APIをPostmanで叩く
リクエストボディに、ログインのための認証情報を入力して、Postする。
4. レスポンスを受け取ったあと、環境変数としてアクセストークン等が保存されているかチェック
「Globals」に値が保存されていたらOK。
5. Postmanの環境変数を、リクエスト前に送る
先程は、Testsという項目を利用して、レスポンス後にJavaScriptで処理を走らせたが、次は「Pre-request Scripts」という項目を利用し、リクエスト前にJavaScriptを走らせるよう記述する。
Pre-request Scriptsは、コレクション単位で設定できるので、コレクションの編集をしよう。コレクションというのは、複数のリクエストタブを一つにグルーピングしているものである。
まずは、「Edit」でコレクションの編集画面に移動する。
その後、Pre-request Scriptsのタブに移動し、リクエスト前に行ってほしい必要な処理を記述する。
// pm.globals.getで、引数に与えたプロパティ名の環境変数を取得する
const uid = pm.globals.get('uid')
const access_token = pm.globals.get('access-token')
const client = pm.globals.get('client')
// pm.request.headers.add で、リクエストのヘッダーに、任意のプロパティ名と値をセットできる。
pm.request.headers.add( {key: 'uid', value: uid })
pm.request.headers.add( {key: 'access-token', value: access_token })
pm.request.headers.add( {key: 'client', value: client })
これで、実質的にログイン状態を維持したまま、Postmanを利用することが出来る。
-
Postmanとは? → API開発のさいに便利なデスクトップアプリケーション。詳しくは公式へ: https://www.postman.com/ ↩
-
PostmanSandboxAPIとは? → Postman上で利用できるAPI。 詳しくは公式リファレンスへ。https://learning.postman.com/docs/postman/scripts/postman-sandbox-api-reference/ ↩