メッセージ フロー変数

message フロー変数とそのプロパティへのアクセスは、アクセスする API プロキシ Flow 内の場所によって異なります。これは、すべてのコンテキストで使えますが、requestresponse などの一部のオブジェクトでは使えません。

使用例

message フロー変数の主な使用例は、プロキシがエラーフローに入ったときです。つまり、request フロー変数と response フロー変数は対象外です。

たとえば、エラーフローでは、response オブジェクトが使えません。エラーフロー内にある場合、JavaScript ポリシーを使って、response オブジェクトにレスポンス ヘッダーを設定することはできません。代わりに、次のいずれかを使用できます。

どちらのオブジェクトもエラーフローで使用でき、JavaScript ポリシー内からレスポンス ヘッダーを設定したり、フロー変数を使用できる他のポリシーでアクセスしたりできます。

AssignMessage ポリシーを使って、ヘッダーなどの値を、response オブジェクトに設定できます。Assign Message は、リクエスト / レスポンス フローからエラーフローへのコンテキスト スイッチを自動的に処理します。

message 変数のもう 1 つの使用例は、MessageLogging ポリシーを使って PostClientFlow にレスポンス データを記録するものです。message オブジェクトを使うと、プロキシの成功条件とエラー条件の両方に応じてレスポンス情報をシームレスに記録できます。

エラーフローでは、error または message のどちらかを使って、JavaScript ポリシーからレスポンス ヘッダーを設定できます。次に例を示します。

context.setVariable('error.header.FOO-1', 'error_header');

あるいは

context.setVariable('message.header.FOO-2', 'message_header');

しかし、次の式は機能しません

context.setVariable('response.header.FOO-3', 'response_header');

この場合、response 変数はエラーフローの対象外です(トレースでは、変数を等号とスラッシュを使って視覚的に表示します)。

1 つのポリシーで成功フローとエラーフローの両方にレスポンス ヘッダーを設定するには、JavaScript ポリシー内の message が使えます。次に例を示します。

<faultrules>
      <faultrule name="invalid_key_rule">
        <step>
          <name>SetResponseHeaders</name>
        </step>
        <condition>(fault.name = "InvalidApiKey")</condition>
      </faultrule>
    </faultrules>

このポリシーでは、次のようなコードにより、すべてのフロー コンテキストでエラー / レスポンス ヘッダーが設定されます。

context.setVariable('message.header.FOO-1', 'the header value');

通常の ProxyResponse フローでこの同じポリシーを再利用でき、すべてのコンテキストから message を使えるため、このフローは成功します。