Postman Flows FQL Let's get started !!
過去Postman Flows を用いて簡単なワークフローを作ってみました。
今日はFlows の機能である様々な処理を実装可能となるFQLを見ていきたいと思います。
FQL とは
Postman の Flows Query Language (FQL) を用いることでFlowsでワークフローを作成する際に複数のAPIコールなどでやり取りされるJSONパラメータを解析・変換することが可能となります。
これにより例えば以下のような処理が実装可能です。
API A に値をPOST → レスポンスのJSONに値を付与 or レスポンスのJSONの値を書き換え → API B に値を付与
レスポンスのJSONに値を付与 or レスポンスのJSONの値を書き換えの部分がローコードで外部処理を呼び出すことなくPostman Flowsだけで完結することになります。
過去AWSでもAWS Step Functionsが外部Lambdaを呼び出すことなくいくつかの処理がStep Functions内で可能となり利便性が爆発的に向上しましたが、それと似ているかもしれません。
さっそくやってみる
公式ドキュメントはこちらに準備されています。レコードブロックと評価ブロックの組み合わせでJSONデータの操作を行うサンプルが記載されているのですが、少し説明が短いので補足しながら作業を進めていきます。
Record ブロック
テスト用のJSONの値を保持し、他のブロックに渡すものです。前述の通りFQLの本来の使い方は、なにがしかのAPIコールのResponseとして戻ってきたJSONを操作することが主になりますが、この場合テスト用APIがひつようとなるため少し大変です。Recordブロックを作ることでJSONの値を独立した状態でFlowsの中で定義して他のブロックに渡すことが出来ます。
ではやってみます。Add blocksをクリックします。

Recordブロックを選択します。

適当な場所に配置します。少し戸惑うかもしれませんが、このRecordブロックは独立したJSONの値を保持するため、Startとは直接つながりません。
+ボタンをクリックしてStringを選択してみます。

nameとkamemanと入力します。
同じように数字も入れてみて下さい。


最後にRecordブロックの出力を受け取るLogブロックを付けます。

Runボタンをクリックするとコンソールに作成されたJSONが出力されます。

{name: "kameman", age: 51}
このように時間などいくつかの予約定数を利用することもできます。

{name: "kameman", age: 51, time: 1722577751930}
Record型を使うことでJSONをネストさせることができます。

例えば以下の場合

このようなネストされたJSONが出力されます。
{
"name": "kameman",
"age": 51,
"time": 1722577947048,
"details": {
"work": "postman",
"country": "japan"
}
}
evaluate ブロック
では次にこのJSONを受け取ってFQLが操作できるようにevaluateブロックを作成します。

作成ができたら一度Logブロックを削除します。

Evaluateブロックのvalue1をクリックしてみて下さい。以下のようにRecordブロックからわたってくるJSONのフォーマットを正しく把握していることがわかります。

Evaluateブロックの右下がResult ?となっていることに注目してください。
value1として受け取るデータは確定している一方出力する値が決まっていないため?になっています。
例えばWrite an FQL queryとなっている箇所にJSONの値が格納されているvalue1と入力してみます。
以下のように出力する値が確定しました。

value1をvalue1.ageに変更すると出力が51になります。
つまりJSONの値からageだけを抜き取っています。

次にvalue1.ageに対するboolean式を書いてみます。

$boolean(value1.age>60)?true:false
正しくfalseが出ています。数字を20に変更すると勿論ですが結果が変わります。
boolean以外にも多くのビルトイン関数があります。Postmanの草薙さんがまとめてくれています。
Discussion