政策錯誤須知

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

本主題說明政策錯誤的結構,以及狀態變數的種類 是在政策錯誤發生時設定。這是您在設計和編寫程式碼時 實作 Proxy 的錯誤處理機制。

本主題假設您已大致瞭解 Edge 中的錯誤處理機制運作方式,且 找出問題規則如需審查相關資訊,請參閱「處理錯誤」一文。這裡的資訊 也能協助您瀏覽及使用政策錯誤參考資料

關於預設政策錯誤回應

政策擲回錯誤時,Edge 會立即進入錯誤流程並產生錯誤 撰寫新的電子郵件訊息這則系統產生的訊息是 JSON 物件,內含兩位元資訊: errorcodefaultstring 的錯誤訊息。

例如:

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

讓我們快速解析這則錯誤訊息:

錯誤代碼包含一個前置字串和一個錯誤 名稱,如下所示:[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 標記。如要正確檢查這個變數,您必須 您應該瞭解兩件事:

  • 您要檢查的政策名稱。亦即政策的值 name 屬性,而不是顯示名稱。政策中一律會包含這項屬性 定義的 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 變數相似訊息變數很特別,因為這包含 內容相關。在要求流程中,運作方式與要求變數類似。在回應流程中, 可用於取得/設定回應值。如要進一步瞭解,請參閱使用 訊息變數的案例

請參閱變數參考資料 ,瞭解所有 Edge 變數的相關資訊,包括 errormessage