政策錯誤須知

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

本主題將說明政策錯誤的結構,以及發生政策錯誤時會設定的流程變數類型。如果您要為 Proxy 設計及實作錯誤處理,這項資訊就非常重要。

本主題假設您對 Apigee 中的錯誤處理運作方式有基本瞭解,且知道錯誤規則為何。如需審查,請參閱「處理錯誤」一文。這裡提供的資訊也能協助您瀏覽及使用政策錯誤參考資料

關於預設政策錯誤回應

當政策擲回錯誤時,Apigee 會立即進入錯誤流程並產生錯誤訊息。系統產生的這則訊息是 JSON 物件,其中包含兩個位元組資訊:errorcodefaultstring

例如:

{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"mymessage message is not available for ExtractVariable: ParseJsonResponse"
   }
}

讓我們快速分析這個錯誤訊息:

errorcodeprefixerror name 組成,如下所示:[prefix].[error_name]。在上述範例中,「steps.extractvariables」是前置字串,而「SourceMessageNotAvailable」是錯誤名稱。前置字串會指出產生錯誤的政策類型。在上述範例中,您可以得知是 ExtractVariables 政策產生錯誤,且錯誤名稱為 SourceMessageNotAvailable

faultstring 包含錯誤的說明。錯誤字串通常會提供線索,協助您找出導致錯誤的特定問題,例如政策名稱、未解析變數的名稱,或導致錯誤的任何因素。舉例來說,在上方的錯誤訊息中,mymessage 恰好是政策中參照的未解析訊息變數名稱,而 ParseJsonResponse 則是觸發錯誤的政策名稱。

政策錯誤專屬變數

觸發政策錯誤時,系統會填入特定錯誤流程變數。這些變數在錯誤處理方面非常實用。如處理錯誤一節所述,一般做法是擷取系統產生的政策錯誤,並執行後續動作,例如建立自訂錯誤回應。舉例來說,基於安全考量,您可能不希望用戶端看到 Apigee 傳回的實際錯誤和狀態碼。

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>

關於 errormessage 變數

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

error.ERROR_COMPONENT = VALUE

例如:

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

error.status.code = "500"

錯誤流程中也提供 message 變數,可用於與 error 變數類似的用途。訊息變數是特殊變數,因為它與內容相關。在要求流程中,它會像要求變數一樣運作;在回應流程中,則可用於取得/設定回應值。

如要瞭解所有 Apigee 變數 (包括 errormessage) 的相關資訊,請參閱「流程變數參考資料」。