🙆

Postman execution.runRequest : コレクションの連続実行をスクリプトで制御する

に公開

先日こちらの記事で、2つのAPIコールを連続実行する手順を作成してみました。
https://zenn.dev/sakura_internet/articles/4e15726aa975a7

APIコールのPost-responseスクリプトの中で以下を指定し、レスポンスをさらにつぎのAPIのPOSTパラメータに用いる、という処理を行いました。

// レスポンスから text を抽出
let response = pm.response.json();
let textFromResponse = response.text;

if (!textFromResponse) {
    console.warn("text フィールドがレスポンスに存在しません");
} else {
    // API呼び出し
    pm.sendRequest({
        url: 'https://api.ai.sakura.ad.jp/v1/chat/completions',
        method: 'POST',
        header: {
            'Accept': 'application/json',
            'Authorization': 'Bearer <TOEKN>',
            'Content-Type': 'application/json'
        },
        body: {
            mode: 'raw',
            raw: JSON.stringify({
                model: 'gpt-oss-120b',
                messages: [
                    { role: 'user', content: "次の文をサマーりしてください"+textFromResponse }
                ],
                temperature: 0.7,
                max_tokens: 200,
                stream: false
            })
        }
    }, function (err, res) {
        if (err) {
            console.error('API呼び出しエラー:', err);
            return;
        }

        let chatResponse = res.json();
        console.log('gpt-oss-120b 応答:', chatResponse);

        // 必要なら保存
        pm.environment.set("chat_response_content", JSON.stringify(chatResponse));
    });
}

この方式ではpm.sendRequestを用いて単純にスクリプトで外部APIを呼び出しています。ただせっかくPostmanを使うのであればやっぱりAPIコールはコレクションという形で管理し、Post-resposneスクリプトの中で次のコレクションを呼び出す、という形態が取れれば様々なPostmanのテスト機能が使えるため便利です。

調べていたところ2025年10月1日にタイムリーなアップデートが来ていました。
https://learning.postman.com/docs/tests-and-scripts/write-scripts/postman-sandbox-api-reference/#use-scripts-to-send-requests-stored-in-your-collections

Post-responseの中でexecution.runRequestを使えばコレクションに保存されているAPIコールのIDを指定することで呼び出せるようです。

さっそくやってみる

まずコレクションには2つのAPIコールが設定されています。

whisper : さくらのAI Engineに対して音声の文字起こしリクエストを出す
requestcatcher : testというローカル変数に格納されている文字列をPOSTする。

https://kameda.requestcatcher.com/?test={{test}}

{{test}}というのはPostman独自のローカル変数書式です。

つまりwhisperのレスポンスボディを{{test}}にセットしてrequestcatcherコレクションをexecution.runRequestを使って呼び出す、というものを作ります。

1. whisper 側のPost-response 設定

以下のスクリプトを挿入します。

try {
  // 今のリクエストのレスポンス本文(文字列)
  const bodyText = pm.response.text();

  const runRes = await pm.execution.runRequest(
    "13003149-9df94cda-68fe-4b21-835b-fac215a708eb",
    {
      variables: {
        test: bodyText
      }
    }
  );

  console.log("Response received with status:", runRes.code, runRes.json());
}
catch (error) {
  console.error("Failed to send a request from the collection", error);
}

13003149-9df94cda-68fe-4b21-835b-fac215a708ebrequestcatcherのコレクションIDです。PostmanのエディターではこのようにIDを調べなくても事前に挿入してくれるようになっています。便利!

以下の部分でレスポンスボディがローカル変数(test)にセットされます。

      variables: {
        test: bodyText
      }

2. requestcatcherのPre-request設定

次に呼び出される側でローカル変数(test)を読み取りリクエストにセットするためPre-requestに以下のスクリプトをセットします。

const v = pm.variables.get('test'); // "hello"
console.log('test =', v);

3. テスト実行

whisper を実行すると以下の様にそのあと連続的にrequestcatcherが実行されていることがわかります。

Discussion