您正在查看 Apigee Edge 說明文件。
前往 Apigee X 說明文件。info
本主題將說明政策錯誤的結構,以及發生政策錯誤時設定的流程變數類型。如果您要為 Proxy 設計及實作錯誤處理,這項資訊就非常重要。
本主題假設您已大致瞭解 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
設為錯誤代碼的 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
變數僅適用於 Proxy 的錯誤流程。您可以透過錯誤變數取得實用資訊,例如錯誤訊息、狀態碼、原因詞組等。錯誤變數的格式模式如下:
error.[error_component] = [value]
例如:
error.message
= "request message is not available for ExtractVariable:
ParseJsonResponse
"
和
error.status.code = "500"
message
變數也適用於錯誤流程,且可用於與 error
變數類似的用途。訊息變數很特別,因為其具備脈絡。它在要求流程中的運作方式類似要求變數,在回應流程中,則可以用來取得/設定回應值。詳情請參閱「訊息變數的用途」。
如要瞭解所有 Edge 變數 (包括 error
和 message
) 的相關資訊,請參閱「變數參考資料」。