https://qiita.com/KameMan/items/0f1d2a0038322df08489
前回の記事ではFlowsの複数ブロック間のデータの受け渡しに変数を用いる方法を簡単に説明しました。
この記事ではその変数の環境についてもう少し詳しく触れたいと思います。
まずは簡単なテスト環境作成
いつ通り神サイトであるhttps://requestcatcher.com/を用いて、POST用APIを作成します。名前はなんでも良いですがvariabletest
にしましょう。
新規でコレクションを作成しPOSTリクエストを実行します。
ここでvalue1
という名前の変数を作成します。前回の記事でもありましたがこれは現時点では未解決の変数です。
これを変数として認識させるためには、環境
で新規に環境(変数の置き場所)を作成します。
以下のように設定し保存
をクリックします。
コレクション側で環境を切り替えると変数を認識します。
では保存を行って次に、このコレクションをを用いたフローを作成します。
一度この状態でRun
をクリックして実行するとrequestcatcher側の出力はまだ変数を認識していないことがわかります。つまりコレクションでは変数を認識していますが、フローでは変数を認識していません。
以下の通り明示的に変数に対してどの環境から値を読み込むかを指定する必要があります。
コレクションと異なり画面右上の環境設定だけでは不十分という点に注意してください。
ローカル環境とグローバル変数
たとえば複数人のチームで作業を行う場合、変数は統一しておきたい場合があります。その場合は環境にあらかじめ準備されているグローバル
を用います。グローバル
として設定された変数はワークスペースのどこからでも認識されます。ただしローカルの環境と変数が重複する場合、ローカルの変数が優先されます。例えば意図的に同じ変数名で異なる値をグローバルに書き込み保存
ボタンをおします。
この状態でフローを再度実行します。この際value1
の変数参照先を新しい環境
に設定しておくと先ほどと同じようにtest
を読み込んでいることがわかります。
次に以下の通り環境情報を削除して再度実行するとグローバルの変数を読み込みます。
つまりローカル環境で明示的に宣言されているときはそちらを優先させ、宣言されていない場合はグローバルを見る、という仕様になっていることがわかります。変数のスコープはグローバルの方が広いですが、優先順位はローカルの環境が上位に来ています。
Postman クラウドとグローバル変数
つぎに前回の記事で行った通りこのフローをPublishしてWebhook経由で起動します。
そうすると変数は認識されなくなります。
一方グローバルではなく環境を指定すると変数を認識します。
まずこの挙動を理解するためにはPostmanクラウドとローカル環境について整理する必要があります。
Postmanを使っている場合、ローカルのアプリ、もしくはブラウザから操作することになります。これはローカル環境です。ブラウザから操作していたとしても環境は皆さん毎に固有化しており設定された変数はその範囲で閉じられます。クラウド流にいうとローカルインスタンスといったところでしょうか。
一方作成したフローをデプロイするとPostmanクラウド上での動作となります。Postmanクラウドには以下のような専用の機能も備わっていますのでこれらを使い分けていくことが必要になります。
- モニター
- ランナーのスケジュール実行
- モックサーバーの稼働
そしてグローバルの変数はPostmanクラウドにはデプロイされません。一方ローカルの変数はフローと一緒にデプロイされるためWebhook経由でのフローの起動や、スケジュール実行等Postmanクラウド固有の機能と連携させる場合は、ローカル環境の変数を用いる必要があります。ローカル環境はPostmanクラウドへ自動でデプロイされるため意識する必要はりません。
初期値と現在値
変数の作成画面に初期値
と現在値
の2種類が存在しています。
Flowsで変数の値を書き換えた場合、現在値
が変更になります。ただし前述の通りローカルインスタンスとPostmanクラウドでは異なる環境であり、Postmanクラウド上でフローを動作させた場合、変数の値は更新されません。 このためPostmanクラウド上で変数を使う場合定数として取り扱う必要があります。デプロイ時の初期値
が定数の値として引き継がれます。
こちらについてはサンプル付きでもう一本ブログで説明したいと思っています。
より詳細な変数の解説はPostmanの川崎さんがブログを執筆していますので呼んでみて下さい。
https://qiita.com/yokawasa/items/05913df60aea07395903