Postman Flows FQL その2 APIからのJSON Responseを操作する (by Cloudflare Workers)
前回の記事ではPostman Flowsを用いたFlows Query Language (FQL) によるJSONデータの処理を行いました。
JSONデータはRecordブロックを使って流し込んだため、本来の用途ではなくあくまでテスト目的です。Postman Flows はAPI駆動のワークフローエンジンであるため、APIコールの結果レスポンスとして戻ったJSONボディを受け取り次の処理に進めることが想定された利用目的です。
このため、今日はテスト用APIをCloudflare Workers を用いて構築します。
Cloudflare Workers の準備
Cloudflare Workers はCloudflareが提供するサーバレスなエッジコンピューティングサービスです。Javascript / Typescriptを活用して様々な処理を実装できます。AWS Lambda と異なり、軽量であること、デフォルトでHTTPエンドポイントが存在しておりブラウザからのテストが簡単であること、永続性ストレージサービスが備わっていること、などがあげられます。
等を参考に簡単なHello Worldを構築します。
その後Workerのスクリプトを以下に置換してDeployします。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const data = {
message: 'Hello, world!',
timestamp: new Date().toISOString()
}
return new Response(JSON.stringify(data), {
headers: { 'Content-Type': 'application/json' }
})
}
ブラウザでアクセスすると以下のJSONが戻ります。
{"message":"Hello, world!","timestamp":"2024-08-07T06:37:04.815Z"}
Postman Collection の設定
Postman Flowsで設定可能なAPIコールはあらかじめPostman Collectionとして登録されている必要があります。
コレクションから新規ボタンをクリックします。

HTTPを選択します。

WorkerのURLを入力して送信ボタンを押します。

ResponseのJSON Body を正しく受信していることがわかります。

保存ボタンを押してこのAPIコールを保存します。

適当な名前でSaveします。

次にフローの画面で新規ボタンを押します。

次はフローを選びます。

Send a requestをクリックします。

先ほど作成されたコレクションを選択します。

Runボタンをクリックすると値が戻ってきます。

Evaluate ブロックの接続
これで前回の記事で触れたRecordブロックと同じ枠割を果たすAPIコールが作成できましたのでEvaluateブロックを接続し、bodyを選択します。

FQLでvalue1と入力すると正しくAPIコールで戻ったJSON ResponseをEvaluate ブロックが受け取っていることがわかります。

value1.messageと入力するとmessage要素だけを抜き出してくれます。

この値はResultとして出力されますのでさらに次のAPIコールやブロックに渡すことが可能です。
変数の操作
例えば以下のような2つ目のAPIコールを作成した場合


value1がEvaluateブロックのResultとつながってくれません。これは受け取り側のvalue1がString型(Aa)となっているためです。Select型にすると受け取ることができます。

もう一つ方法があり、変数を使う方法です。その場合、変数を作成し一度変数にその値を格納する必要があります。
まずは2つ目のAPIをhttps://requestcatcher.com/という神サイトで作っておきます。
そして以下のようなコレクションを作成し保存しておきます。

この時点ではmessage変数を認識していません。ここで 環境 の出番です。


シンプルにmessageという変数を作成して保存しておきます。

新しい環境という場所に変数が保存されたことに注目してください。

次にコレクションの画面に戻り、新しい環境を選択します。

messageという変数を正しく認識しています。

EvaluateブロックのResultと2つめのAPIコールのmessageがくっつきました!
RequestCatcherの画面では値が正しくPOSTされたことがわかります。
GET /?message=Hello%20World%20! HTTP/1.1
Host: postmanflow.requestcatcher.com
Accept: */*
Accept-Encoding: gzip, deflate, br
Cache-Control: no-cache
Connection: keep-alive
Postman-Token: 0e8a65e1-b751-43d0-ad98-c7681623b3a4
User-Agent: PostmanRuntime/7.39.0
Discussion