消息流变量

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

message 流变量及其属性的访问取决于访问它的 API 代理流中的点。它在所有上下文中都可用,而某些对象(例如 requestresponse)则不可用。

用例

message 流变量的主要用例就是您的代理进入错误流时:requestresponse 流变量超出范围。

例如,在错误流中,response 对象不可用。如果位于错误流,您将无法使用 JavaScript 政策response 对象上设置响应标头。您可以改用以下任一方法:

这两个对象都在错误流中可用,并可用于在 JavaScript 政策中设置响应标头,也可在可以使用流程变量的其他政策中访问。

您可以使用 AssignMessage 政策将值(例如标头)分配给响应对象。“分配消息”会自动处理从请求/响应流到错误流的上下文中的开关。

message 变量的另一个用例是使用 MessageLogging 政策在 PostClientFlow 中记录响应数据。如果您使用 message 对象,则可以在代理中在成功和错误状况后无缝记录响应信息。

示例

在错误流中,您可以使用 errormessage 设置 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 变量在错误流中超出范围。(请注意,在跟踪记录中,这将使用变量直观指示,其中使用等号加斜杠显示)。

如需在单个政策中为成功和错误流设置响应标头,您可以在 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 在所有上下文中均可用。