政策錯誤須知

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

本主題說明政策錯誤的結構,以及發生政策錯誤時設定的流程變數類型。如果您要設計及實作 Proxy 的錯誤處理功能,請務必提供這項資訊。

本主題假設您大致瞭解 Edge 中的錯誤處理方式,並且瞭解什麼是錯誤規則。如需審查,請參閱「處理錯誤」。此處資訊也有助於您瀏覽及使用政策錯誤參考資料

關於預設的政策錯誤回應

如果政策擲回錯誤,Edge 會立即進入錯誤流程,並產生錯誤訊息。這個系統產生的訊息是包含兩項資訊的 JSON 物件:errorcode錯誤字串

例如:

{  
   "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 設為錯誤代碼的 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>

關於 errormessage 變數

error變數僅適用於 Proxy 的錯誤流程。您可以從錯誤變數中取得實用資訊,例如錯誤訊息、狀態碼、原因詞組等。錯誤變數的格式模式如下:

error.[error_component] = [value]

例如:

error.message = "request message is not available for ExtractVariable: ParseJsonResponse



error.status.code = "500"

錯誤流程中也可以使用 message 變數,用途與 error 變數類似。訊息變數很特殊,因為這個變數是關聯內容。在要求流程中,運作方式與要求變數類似,在回應流程中,則可用來取得/設定回應值。詳情請參閱「訊息變數的用途」。

如需所有邊緣變數 (包括 errormessage) 的相關資訊,請參閱變數參考資料