정책 오류에 대해 알아야 할 사항

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

이 주제에서는 정책 오류의 구조와 정책 오류가 발생할 때 설정되는 흐름 변수의 종류를 설명합니다. 이 정보는 프록시에 대한 결함 처리를 설계하고 구현하는 경우에 필요합니다.

이 주제에서는 Edge의 오류 처리 작동 방식을 일반적으로 이해하고 있으며 오류 규칙이 무엇인지 알고 있다고 가정합니다. 검토가 필요한 경우 오류 처리를 참조하세요. 이 정보는 정책 오류 참조를 탐색하고 사용하는 데도 도움이 됩니다.

기본 정책 오류 응답 정보

정책에서 오류가 발생하면 Edge는 즉시 오류 흐름으로 전환되고 오류 메시지를 생성합니다. 이 시스템 생성 메시지는 errorcodefaultstring이라는 두 가지 정보를 포함하는 JSON 객체입니다.

예를 들면 다음과 같습니다.

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

다음과 같은 오류 메시지를 신속하게 분석해 보겠습니다.

errorcode[prefix].[error_name]와 같이 프리픽스오류 이름으로 구성됩니다. 위의 예시에서 'steps.extractvariables'는 프리픽스이고 SourceMessageNotAvailable은 오류 이름입니다. 프리픽스를 통해 오류를 생성한 정책의 종류를 알 수 있습니다. 위의 예시에서는 Extract Variables 정책이 오류를 생성했으며 오류 이름은 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 변수는 프록시의 오류 흐름에서만 사용할 수 있습니다. 오류 메시지, 상태 코드, 이유 구문 등과 같은 유용한 정보를 오류 변수에서 가져올 수 있습니다. 오류 변수의 형식 지정 패턴은 다음과 같습니다.

error.[error_component] = [value]

예를 들면 다음과 같습니다.

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



error.status.code = "500"

message 변수는 오류 흐름에서도 사용할 수 있으며 error 변수와 비슷한 목적으로 사용할 수 있습니다. 메시지 변수는 문맥적이므로 특별합니다. 메시지 변수는 요청 흐름에서 요청 변수처럼 작동하며, 응답 흐름에서 응답 값을 가져오거나 설정하는 데 사용할 수 있습니다. 자세한 내용은 메시지 변수 사용 사례를 참조하세요.

errormessage를 포함한 모든 Edge 변수에 대한 자세한 내용은 변수 참조를 확인하세요.