🕌

Postman Flows FQL Let's get started !!

2025/03/03に公開

過去Postman Flows を用いて簡単なワークフローを作ってみました。
https://qiita.com/KameMan/items/b3313738bf29ec469dd1

今日は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データの操作を行うサンプルが記載されているのですが、少し説明が短いので補足しながら作業を進めていきます。
https://learning.postman.com/docs/postman-flows/flows-query-language/introduction-to-fql/

Record ブロック

テスト用のJSONの値を保持し、他のブロックに渡すものです。前述の通りFQLの本来の使い方は、なにがしかのAPIコールのResponseとして戻ってきたJSONを操作することが主になりますが、この場合テスト用APIがひつようとなるため少し大変です。Recordブロックを作ることでJSONの値を独立した状態でFlowsの中で定義して他のブロックに渡すことが出来ます。

ではやってみます。Add blocksをクリックします。
image.png
Recordブロックを選択します。
image.png
適当な場所に配置します。少し戸惑うかもしれませんが、このRecordブロックは独立したJSONの値を保持するため、Startとは直接つながりません。
+ボタンをクリックしてStringを選択してみます。
image.png
namekamemanと入力します。
同じように数字も入れてみて下さい。
image.png
image.png
最後にRecordブロックの出力を受け取るLogブロックを付けます。
image.png
Runボタンをクリックするとコンソールに作成されたJSONが出力されます。
image.png

{name: "kameman", age: 51}

このように時間などいくつかの予約定数を利用することもできます。
image.png

{name: "kameman", age: 51, time: 1722577751930}

Record型を使うことでJSONをネストさせることができます。
image.png
例えば以下の場合
image.png

このようなネストされたJSONが出力されます。

{
    "name": "kameman",
    "age": 51,
    "time": 1722577947048,
    "details": {
        "work": "postman",
        "country": "japan"
    }
}

evaluate ブロック

では次にこのJSONを受け取ってFQLが操作できるようにevaluateブロックを作成します。
image.png
作成ができたら一度Logブロックを削除します。
image.png
Evaluateブロックのvalue1をクリックしてみて下さい。以下のようにRecordブロックからわたってくるJSONのフォーマットを正しく把握していることがわかります。
image.png
Evaluateブロックの右下がResult ?となっていることに注目してください。
value1として受け取るデータは確定している一方出力する値が決まっていないため?になっています。
例えばWrite an FQL queryとなっている箇所にJSONの値が格納されているvalue1と入力してみます。
以下のように出力する値が確定しました。
image.png
value1value1.ageに変更すると出力が51になります。
つまりJSONの値からageだけを抜き取っています。
image.png
次にvalue1.ageに対するboolean式を書いてみます。
image.png

$boolean(value1.age>60)?true:false

正しくfalseが出ています。数字を20に変更すると勿論ですが結果が変わります。
boolean以外にも多くのビルトイン関数があります。Postmanの草薙さんがまとめてくれています。
https://qiita.com/nagix/items/adb1b7f484fc8167c046

Discussion