毎回手作業で更新しなくていいのです
皆大好きPostman。
Postmanには環境変数があり、各Request設定で環境変数を埋め込む事で、設定を一元管理する事ができます。
今回はこの環境変数についてのお話です。
Postmanって何?
(主に)HTTPリクエストを発行するためのツールです。
ブラウザのアドレスバーだとGETリクエストしかできないし、ターミナルでは都度APIのコマンドを用意する必要があります。
Postmanはこれらを解決してくれ、更に環境変数でAPIサーバのポート番号やトークン値等を一元管理できたり、javascriptで動的に色々制御できたりするツールです。
設定のimport/exportも可能なので、gitで管理して全員共通のAPI実行環境を用意する〜、なんて事もできます。
環境変数を使ってトークンを一元管理するが・・・
例えば「データ取得API」が20個有り、それら全てのAPIはトークン取得APIによって取得したトークンをAuthenticationヘッダに設定する事で、APIが使用できるとします。トークンには有効期限が有り、一定期間で無効になってしまいます。
最初は、トークン失効後にトークンを再発行し、そのトークンを毎回20種類のAPIに対して1件づつ設定していました。しかしこれは流石に無理があるので、環境変数で一言管理してみました。
画面右上の歯車ボタンをクリックし、Globalsボタンをクリックします。
テーブルに変数名と値を入力します。今回はトークン値だけでなくAPIサーバのportも登録してみました。
中括弧2個のヒゲ(mustache)形式で、アドレスバーにもBearerトークン値にも、Globalsに登録した変数が参照可能になりました。以下のような形で埋め込みます。
{{bearerToken}}
さて、これで以降は環境変数を変更するだけで全APIにBearerトークン値を設定する事ができました!!
・・・・トークンの有効期限が短いので、想像していたよりも頻繁に設定の修正が発生してしまいました。一元管理できてはいますが、1日に何回も変更するのは大変です・・・
そうだ、環境変数を自動更新しよう!
ここで今回の本題です。
現状より更に楽をするためには、トークン取得APIを実行したら自動的にレスポンスjson内のトークン値をGlobalsの環境変数値に上書きする事ができれば、手動での変更は不要になります。
Testsを使ってGlobalsを上書きする
もっといいやり方がある可能性がありますが、「レスポンス値を使って」を実現できるのがTestsを使った方法しか解らなかったので、Testsで説明します。
リクエストのTestsタブを開き、以下のようにjavascriptを記述します。
const json = JSON.parse(responseBody); postman.setGlobalVariable("bearerToken", json.accessToken);
↑のように記述すると、↓のトークン取得APIのレスポンスjsonからbearerTokenの値を取得し、setGlobalVariableでGlobalsを上書きする事がきるのです。
{ "accessToken": "ZDQ1YTkxNTgtZTJkMi00OTU4LTk1ZWItMTM3YzM3NWFhMDg1" }
トークン取得APIのTestsに上記javascriptを記述したら、早速トークン取得APIを実行してみて下さい。取得結果のトークン値でGlobalsの値が上書きされている筈です。
雑感
PostmanでChrome DevToolsを表示する事ができる(という事はpostmanはElectron?)ので、console.log(response) のようなデバッグコードを記述して確認する事もできます。
公式ドキュメントには、各種実行順序やscriptsについてのドキュメントもありますので、他にも自動化したい等があれば、一度ドキュメントに目を通しておくとよさそうですね!
learning.getpostman.com