您正在查看 Apigee Edge 文档。
转到 Apigee X 文档。 信息
本主题介绍政策错误的结构以及发生政策错误时设置的流变量种类。如果您要为代理设计和实现故障处理,此信息非常重要。
本主题假设您大致了解 Edge 中的故障处理机制,并了解什么是故障规则。如果您需要进行回顾,请参阅处理故障。此处的信息还可帮助您导航和使用政策错误参考。
默认政策错误响应简介
当政策抛出错误时,Edge 会立即进入错误流并生成错误消息。这一系统生成的消息是一个 JSON 对象,它包含两部分信息:errorcode 和 faultstring。
例如:
{ "fault":{ "detail":{ "errorcode":"steps.extractvariables.SourceMessageNotAvailable" }, "faultstring":"foo message is not available for ExtractVariable: ParseJsonResponse" } }
让我们快速解构此错误消息:
errorcode 由前缀和错误名称组成,如下所示:[prefix].[error_name]
。在上面的示例中,“steps.extractvariables
”是前缀,SourceMessageNotAvailable
是错误名称。前缀可让您了解生成错误的政策的种类。在上面的示例中,您可以看到提取变量政策生成了错误,错误名称为 SourceMessageNotAvailable
。
faultstring 则包含错误描述。故障字符串通常包含线索,可帮助您找到导致错误的具体问题,例如政策名称、未解析变量的名称或导致错误的任何原因。例如,在上述错误消息中,“foo
”是政策中引用的未解析消息变量的名称,“ParseJsonResponse
”是触发错误的政策的名称。
政策错误特有的变量
当触发政策错误时,某些特定于错误的流变量将被填充。这些变量在故障处理中非常有用。如处理故障主题中所述,捕获系统生成的政策错误并执行后续操作(例如创建自定义错误响应)是一种常见的做法。例如,出于安全原因,您可能需要禁止客户端查看 Edge 返回的实际错误和状态代码。
fault.name
变量
当政策抛出错误时,它会将流变量 fault.name
设置为 errorcode 的 error_name
部分(如上一部分中所述)。在有条件执行故障规则时,通常要评估此变量。
下面是一个示例故障规则,用于测试 fault.name
的值:
<faultrule name="VariableOfNonMsgType"<>/faultrule><FaultRule name="Source Message Not Available Fault"> <Step> <Name>AM-CustomErrorMessage</Name> <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition> </Step> </FaultRule>
请记住,当政策触发错误时,fault.name
变量始终设置为错误名称。
[prefix].[policy_name].failed
变量
除 fault.name
外,开发者通常检查的另一个变量是 [prefix].[policy_name].failed
标志,该标志会在执行政策时设为 true 或 false。在故障规则中,您需要检查其何时为 true,也就是检查是否出现了错误。以下代码显示如何构建条件来检查 [prefix].[policy_name].failed
标志。如需正确检查此变量,您需要了解以下两点:
- 您正在检查的政策的名称。这是政策的名称特性的值,而不是显示名。该特性始终包含在政策定义的 XML 中。
- 特定于您正在检查的政策类型的前缀。(我们将在下文中说明如何查找前缀。)
为便于说明,我们来看另一个故障规则示例。请注意在外部条件中 [prefix].[policy_name].failed
变量名称是如何形成的。在本例中,前缀为 extractvariables
,政策名称为 ParseJsonResponse
。在这种情况下,只有在此变量为 true 时,故障规则才会执行。这有一个诀窍,由于错误规则可能包含多个步骤,因此这种模式非常适合将错误规则整理成块。
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Extract Variable Faults"> <Step> <Name>AM-CustomErrorMessage</Name> <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition> </Step> <Condition>(extractvariables.ParseJsonResponse.failed = true) </Condition> </FaultRule>
error
和 message
变量简介
error
变量仅在代理的错误流中可用。您可以从错误变量中获取有用的信息,例如错误消息、状态代码、原因短语等。错误变量的格式模式为:
error.[error_component] = [value]
例如:
error.message
= "request message is not available for ExtractVariable:
ParseJsonResponse
"
和
error.status.code = "500"
message
变量在错误流中也可用,并且可以用于与 error
变量类似的用途。消息变量比较特殊,因为它是上下文相关的。在请求流中,它的行为类似于请求变量,而在响应流程中它可用于获取/设置响应值。如需了解详情,请参阅消息变量的用例。
如需了解所有 Edge 变量(包括 error
和 message
),请参阅变量参考。