文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

PostmanでGlobalsの環境変数をリクエスト結果で更新する

毎回手作業で更新しなくていいのです

f:id:treeapps:20170828014922p:plain

皆大好きPostman。

Postmanには環境変数があり、各Request設定で環境変数を埋め込む事で、設定を一元管理する事ができます。

今回はこの環境変数についてのお話です。

Postmanって何?

www.getpostman.com

(主に)HTTPリクエストを発行するためのツールです。

ブラウザのアドレスバーだとGETリクエストしかできないし、ターミナルでは都度APIのコマンドを用意する必要があります。

Postmanはこれらを解決してくれ、更に環境変数でAPIサーバのポート番号やトークン値等を一元管理できたり、javascriptで動的に色々制御できたりするツールです。

設定のimport/exportも可能なので、gitで管理して全員共通のAPI実行環境を用意する〜、なんて事もできます。

環境変数を使ってトークンを一元管理するが・・・

例えば「データ取得API」が20個有り、それら全てのAPIはトークン取得APIによって取得したトークンをAuthenticationヘッダに設定する事で、APIが使用できるとします。トークンには有効期限が有り、一定期間で無効になってしまいます。

最初は、トークン失効後にトークンを再発行し、そのトークンを毎回20種類のAPIに対して1件づつ設定していました。しかしこれは流石に無理があるので、環境変数で一言管理してみました。

f:id:treeapps:20191221141421p:plain
画面右上の歯車ボタンをクリックし、Globalsボタンをクリックします。

f:id:treeapps:20191221141437p:plain
テーブルに変数名と値を入力します。今回はトークン値だけでなくAPIサーバのportも登録してみました。

f:id:treeapps:20191221141510p:plain
中括弧2個のヒゲ(mustache)形式で、アドレスバーにもBearerトークン値にも、Globalsに登録した変数が参照可能になりました。以下のような形で埋め込みます。

{{bearerToken}}

さて、これで以降は環境変数を変更するだけで全APIにBearerトークン値を設定する事ができました!!

・・・・トークンの有効期限が短いので、想像していたよりも頻繁に設定の修正が発生してしまいました。一元管理できてはいますが、1日に何回も変更するのは大変です・・・

そうだ、環境変数を自動更新しよう!

ここで今回の本題です。

現状より更に楽をするためには、トークン取得APIを実行したら自動的にレスポンスjson内のトークン値をGlobalsの環境変数値に上書きする事ができれば、手動での変更は不要になります。

Testsを使ってGlobalsを上書きする

もっといいやり方がある可能性がありますが、「レスポンス値を使って」を実現できるのがTestsを使った方法しか解らなかったので、Testsで説明します。

f:id:treeapps:20191221143804p:plain
リクエストのTestsタブを開き、以下のようにjavascriptを記述します。

const json = JSON.parse(responseBody);
postman.setGlobalVariable("bearerToken", json.accessToken);

↑のように記述すると、↓のトークン取得APIのレスポンスjsonからbearerTokenの値を取得し、setGlobalVariableでGlobalsを上書きする事がきるのです。

{
  "accessToken": "ZDQ1YTkxNTgtZTJkMi00OTU4LTk1ZWItMTM3YzM3NWFhMDg1"
}

トークン取得APIのTestsに上記javascriptを記述したら、早速トークン取得APIを実行してみて下さい。取得結果のトークン値でGlobalsの値が上書きされている筈です。

f:id:treeapps:20191221144606p:plain

雑感

PostmanでChrome DevToolsを表示する事ができる(という事はpostmanはElectron?)ので、console.log(response) のようなデバッグコードを記述して確認する事もできます。

公式ドキュメントには、各種実行順序やscriptsについてのドキュメントもありますので、他にも自動化したい等があれば、一度ドキュメントに目を通しておくとよさそうですね!
learning.getpostman.com