message
フロー変数とそのプロパティへのアクセスは、アクセスする API プロキシフロー内の場所によって異なります。これは、すべてのコンテキストで使えますが、request
や response
などの一部のオブジェクトでは使えません。
使用例
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
を使えるため、このフローは成功します。