過去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
をクリックします。
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の草薙さんがまとめてくれています。
https://qiita.com/nagix/items/adb1b7f484fc8167c046