ServiceCallout 정책

제목

ServiceCallout 정책을 사용하면 API 프록시 흐름에서 다른 서비스를 호출할 수 있습니다. 외부 서비스(예: 외부 RESTful 서비스 엔드포인트) 또는 내부 서비스(예: 동일한 조직 및 환경의 API 프록시)에 콜아웃을 만들 수 있습니다.

  • 외부 사용 사례에서는 프록시 외부의 타사 API에 대한 콜아웃을 만듭니다. 타사 API의 응답은 파싱되어 API의 응답 메시지에 삽입되고 앱 최종 사용자를 위한 데이터를 보강하고 매시업합니다. 요청 흐름에서 ServiceCallout 정책을 사용하여 요청을 보낸 다음 응답의 정보를 API 프록시의 TargetEndpoint로 전달할 수도 있습니다.
  • 또 다른 사용 사례에서는 호출을 보내는 동일한 조직 및 환경에 있는 프록시를 호출합니다. 예를 들어 하나 이상의 다른 프록시가 소비하는 개별 하위 수준 기능을 사용하는 프록시가 있는 경우 이 방법이 유용할 수 있습니다. 예를 들어 백엔드 데이터 저장소와 함께 생성/읽기/업데이트/삭제 작업을 노출하는 프록시는 클라이언트에 데이터를 노출하는 다른 여러 프록시의 대상 프록시가 될 수 있습니다.

이 정책은 HTTP 및 HTTPS를 통한 요청을 지원합니다.

샘플

내부 프록시 로컬 호출

<LocalTargetConnection>
    <APIProxy>data-manager</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

이 예시에서는 data-manager라는 로컬 API 프록시(즉, 동일한 조직 및 환경에 있는 프록시)에 대한 콜아웃을 만들어 이름이 default인 프록시 엔드포인트를 지정합니다.

변수로서의 URL

<HTTPTargetConnection>
    <URL>http://example.com/{request.myResourcePath}</URL>
</HTTPTargetConnection>

이 예시에서는 URL에 있는 변수를 사용하여 타겟의 URL을 동적으로 채웁니다. URL의 프로토콜 부분인 http://은 변수로 지정할 수 없습니다. 또한 URL의 도메인 부분과 그 외 부분에 별도의 변수를 사용해야 합니다.

Google Geocoding / 요청 정의

<ServiceCallout name="ServiceCallout-GeocodingRequest1">
    <DisplayName>Inline request message</DisplayName>
    <Request variable="authenticationRequest">
      <Set>
        <QueryParams>
          <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
          <QueryParam name="region">{request.queryparam.country}</QueryParam>
          <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
      </Set>
    </Request>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>
http://maps.googleapis.com/maps/api/geocode/json

요청 객체를 생성하기 위해 AssignMessage 정책과 같은 정책을 사용하는 대신 ServiceCallout 정책에서 직접 정의할 수 있습니다. 이 예시에서 ServiceCallout 정책은 외부 서비스에 전달된 세 가지 쿼리 매개변수의 값을 설정합니다. ServiceCallout 정책에서 페이로드, 인코딩 유형(예: application/xml, 헤더, 양식 매개변수 등)을 지정하는 전체 요청 메시지를 만들 수 있습니다.

다음은 ServiceCallout 정책에 도달하기 전에 요청이 형성되는 또 다른 예시입니다.

<ServiceCallout name="ServiceCallout-GeocodingRequest2">
    <Request clearPayload="false" variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

요청 메시지의 내용은 GeocodingRequest라는 변수(예: AssignMessage 정책에 의해 채워질 수 있는 변수)에서 추출됩니다. 응답 메시지는 GeocodingResponse라는 변수에 할당되며 이 변수는 ExtractVariables 정책이나 자바스크립트 또는 자바로 작성된 커스텀 코드로 파싱될 수 있습니다. 정책은 Google Geocoding API의 응답을 30초 동안 기다린 후에 타임아웃됩니다.

대상 서버 호출

<ServiceCallout async="false" continueOnError="false" enabled="true" name="service-callout">
    <DisplayName>service-callout</DisplayName>
    <Properties/>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </Request>
    <Response>myResponse</Response>
    <HTTPTargetConnection>
        <LoadBalancer>
            <Algorithm>RoundRobin</Algorithm>
            <Server name="httpbin"/>
            <Server name="yahoo"/>
        </LoadBalancer>
        <Path>/get</Path>
    </HTTPTargetConnection>
</ServiceCallout>

이 정책은 LoadBalancer 속성을 사용하여 대상 서버를 호출하고 서버 간 부하 분산을 수행합니다. 이 예시에서는 httpbinyahoo라는 대상 서버 두 개에 부하가 분산됩니다. 프록시에 대상 서버를 설정하고 부하 분산을 구성하는 방법에 대한 자세한 내용은 백엔드 서버 간 부하 분산을 참조하세요.


ServiceCallout 정책 정보

API 프록시에서 ServiceCallout 정책을 사용할 수 있는 사례는 다양합니다. 예를 들어 외부 서비스에 호출을 수행하여 Geolocation 데이터, 고객 리뷰, 파트너의 소매 카탈로그 항목 등을 전달하기 위해 API 프록시를 구성할 수 있습니다.

콜아웃은 일반적으로 두 가지 정책 즉, AssignMessage 및 ExtractVariables와 함께 사용됩니다.

  • 요청: AssignMessage는 원격 서비스로 전송된 요청 메시지를 채웁니다.
  • 응답: ExtractVariables는 응답을 파싱하고 특정 콘텐츠를 추출합니다.

일반적인 ServiceCallout 정책 구성에는 다음이 포함됩니다.

  1. AssignMessage 정책: 요청 메시지를 만들고, HTTP 헤더 및 쿼리 매개변수를 채우고, HTTP 동사 설정 등을 수행합니다.
  2. ServiceCallout 정책: AssignMessage 정책으로 생성된 메시지를 참조하여 외부 호출의 대상 URL을 정의하고, 대상 서비스가 반환하는 응답 객체의 이름을 정의합니다.

    성능 향상을 위해 ServiceCallout 응답도 캐시할 수 있습니다(참조: ServiceCallout 정책의 결과를 캐시에 저장하려면 어떻게 해야 하나요? 나중에 캐시에서 데이터를 가져올 수 있나요?).

  3. ExtractVariables 정책: 일반적으로 ServiceCallout으로 생성된 메시지를 파싱하는 JSONPath 또는 XPath 표현식을 정의합니다. 그런 다음 정책은 ServiceCallout 응답에서 파싱된 값이 포함된 변수를 설정합니다.

커스텀 오류 처리

요소 참조

이 정책에 구성할 수 있는 요소와 속성은 다음과 같습니다.

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Remove>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
         </Remove>
         <Copy>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Copy>
        <Add>
            <Headers/>
            <QueryParams/>
            <FormParams/>
        </Add>
        <Set>
            <Headers/>
            <QueryParams/>
            <FormParams/>
            <Payload/>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Set>
    </Request>
    <Response>calloutResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
        <URL>http://example.com</URL>
        <LoadBalancer/>
        <SSLInfo/>
        <Properties/>
    </HTTPTargetConnection>
    <LocalTargetConnection>
        <APIProxy/>
        <ProxyEndpoint/>
        <Path/>
    </LocalTargetConnection>
</ServiceCallout>

<ServiceCallout> 속성

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">

다음 표는 모든 정책 상위 요소의 공통 속성에 대해 설명합니다.

속성 설명 기본 Presence
name

정책의 내부 이름입니다. name 속성의 값에는 문자, 숫자, 공백, 하이픈, 밑줄, 마침표가 포함될 수 있습니다. 이 값은 255자(영문 기준)를 초과할 수 없습니다.

원하는 경우 <DisplayName> 요소를 사용하여 관리 UI 프록시 편집기의 정책에 다른 자연어 이름을 사용하여 정책에 라벨을 지정합니다.

해당 없음 필수
continueOnError

정책이 실패할 경우 오류가 반환되도록 하려면 false로 설정합니다. 이는 대부분의 정책에서 예상되는 동작입니다.

정책이 실패해도 흐름 실행이 계속되도록 하려면 true로 설정합니다.

false 선택
enabled

정책을 시행하려면 true로 설정합니다.

정책을 중지하려면 false로 설정합니다. 정책이 흐름에 연결되어 있어도 정책이 시행되지 않습니다.

선택
async

이 속성은 지원이 중단되었습니다.

false 지원 중단됨

<DisplayName> 요소

name 속성 외에도 이 요소를 사용하여 관리 UI 프록시 편집기의 정책에 다른 자연어 이름으로 라벨을 지정합니다.

<DisplayName>Policy Display Name</DisplayName>
기본

해당 없음

이 요소를 생략하면 정책 name 속성 값이 사용됩니다.

Presence 선택
유형 문자열

<Request> 요소

API 프록시에서 다른 서비스로 전송되는 요청 메시지가 포함된 변수를 지정합니다. 이 변수는 흐름의 이전 정책에 의해 생성되거나 ServiceCallout 정책에서 인라인으로 만들 수 있습니다.

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Remove>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Remove>
    <Copy>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Copy>
    <Add>
        <Headers/>
        <QueryParams/>
        <FormParams/>
    </Add>
    <Set>
        <Headers/>
        <QueryParams/>
        <FormParams/>
        <Payload/>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Set>
</Request>

<Remove>, <Copy>, <Add>, <Set> 태그의 구문은 AssignMessage 정책과 동일합니다.

요청 메시지를 확인할 수 없거나 잘못된 요청 메시지 유형인 경우 정책이 오류를 반환합니다.

가장 간단한 예시에서는 API 프록시의 흐름 초반부에 채워진 요청 메시지가 포함된 변수를 전달합니다.

<Request clearPayload="true" variable="myRequest"/>

또는 ServiceCallout 정책 자체에서 외부 서비스로 전송된 요청 메시지를 채울 수 있습니다.

<Request>
  <Set>
    <Headers>
      <Header name="Accept">application/json</Header>
    </Headers>
    <Verb>POST</Verb>
    <Payload contentType="application/json">{"message":"my test message"}</Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
기본 Request(요청) 요소 또는 관련 속성을 생략하면 Apigee는 다음의 기본값을 할당합니다.

<Request clearPayload="true" variable="servicecallout.request"/>

이 기본값이 무엇을 의미하는지 살펴보겠습니다. 먼저 clearPayload=true는 ServiceCallout 정책이 실행될 때마다 새 요청 객체가 생성된다는 것을 의미합니다. 즉, 요청과 요청 URI 경로가 재사용되지 않습니다. 둘째, 기본 변수 이름 servicecallout.request는 이름을 제공하지 않는 경우 요청에 할당되는 예약된 이름입니다.

데이터 마스킹을 사용하는 경우 이 기본 이름을 알고 있어야 합니다. 변수 이름을 생략하면 servicecallout.request를 마스크 구성에 추가해야 합니다. 예를 들어 Authorization 헤더가 Trace 세션에 표시되지 않도록 Authorization 헤더를 마스킹하려면 마스킹 구성에 다음을 추가하여 기본 이름을 캡처합니다.

servicecallout.request.header.Authorization.

Presence 선택사항
유형 해당 없음

속성

속성 설명 기본 Presence
변수

요청 메시지를 포함할 변수의 이름입니다.

servicecallout.request 선택
clearPayload

true인 경우 요청 메시지에서 사용되는 메모리를 확보하기 위해 HTTP 대상으로 요청이 전송된 후 요청 메시지가 포함된 변수가 삭제됩니다.

ServiceCallout이 실행된 후 요청 메시지가 필요한 경우에만 clearPayload 옵션을 false로 설정합니다.

선택

<Request>/<IgnoreUnresolvedVariables> 요소

true로 설정하면 정책은 요청에서 해결되지 않은 변수 오류를 무시합니다.

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
기본 false
Presence 선택
유형 부울

<Response> 요소

API 프록시 로직이 추가 처리를 위해 원격 호출의 응답이 필요한 경우 이 요소를 포함합니다.

이 요소가 있는 경우 외부 서비스에서 수신한 응답 메시지를 포함할 변수의 이름을 지정합니다. 대상의 응답은 정책에서 전체 응답을 성공적으로 읽는 경우에만 변수에 할당됩니다. 어떠한 이유로든 원격 호출이 실패하면 정책에서 오류를 반환합니다.

이 요소를 생략하면 API 프록시가 응답을 기다리지 않으며, API 프록시 흐름 실행은 모든 후속 흐름 단계를 통해 계속 진행됩니다. 또한 명확히 하자면 Response 요소가 없으면 대상의 응답을 후속 단계에 따라 처리할 수 없으며, 프록시 흐름에서 원격 호출의 실패를 감지할 방법이 없습니다. ServiceCallout을 사용할 때 Response 요소를 생략하는 것의 일반적인 용도는 외부 시스템에 로깅하기 위함입니다.

 <Response>calloutResponse</Response>
기본 NA
Presence 선택
유형 문자열

<Timeout> 요소

ServiceCallout 정책이 대상의 응답을 대기하는 시간(밀리초)입니다. 런타임 시 이 값을 동적으로 설정할 수 없습니다. ServiceCallout이 제한 시간에 도달하면 오류 처리에 설명된 대로 HTTP 500이 반환되고, 정책이 실패하며, API 프록시는 오류 상태가 됩니다.

<Timeout>30000</Timeout>
기본 55,000밀리초(55초), Apigee의 HTTP 제한 시간 기본 설정
Presence 선택
유형 정수

<HTTPTargetConnection> 요소

URL, TLS/SSL, HTTP 속성과 같은 전송 세부정보를 제공합니다. <TargetEndpoint> 구성 참조를 확인하세요.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <LoadBalancer/>
    <SSLInfo/>
    <Properties/>
</HTTPTargetConnection>
기본 해당 없음
Presence 필수
유형 해당 없음

<HTTPTargetConnection>/<URL> 요소

호출되는 서비스의 URL입니다.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
</HTTPTargetConnection>

변수를 통해 URL의 일부를 동적으로 제공할 수 있습니다. 그러나 아래의 URL http://의 프로토콜 부분은 변수로 지정될 수 없습니다. 다음 예시에서는 변수를 사용하여 쿼리 매개변수의 값을 지정합니다.

<URL>http://example.com/forecastrss?w=${request.header.woeid}</URL>

또는 변수를 사용하여 URL 경로의 일부를 설정합니다.

<URL>http://example.com/{request.resourcePath}?w=${request.header.woeid}</URL>

변수를 사용하여 URL의 도메인과 포트를 지정하려면 도메인 및 포트에만 첫 번째 변수를 사용하고 URL의 다른 부분에 두 번째 변수를 사용합니다.

<URL>http://{request.dom_port}/{request.resourcePath}</URL>
기본 해당 없음
Presence 필수
유형 문자열

<HTTPTargetConnection>/<SSLInfo> 요소

백엔드 서비스에 대한 TLS/SSL 구성입니다. TLS/SSL 구성에 대한 도움말은 API 프록시 구성 참조에서 TLS 구성 옵션 및 'TLS/SSL TargetEndpoint 구성'을 참조하세요.

<HTTPTargetConnection>
    <URL>https://example.com</URL>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <KeyStore>myKeystore</KeyStore>
        <KeyAlias>myKey</KeyAlias>
        <TrustStore>myTruststore</TrustStore>
        <Ciphers/>
        <Protocols/>
    </SSLInfo>
</HTTPTargetConnection>
기본 해당 없음
Presence 선택
유형 해당 없음

<HTTPTargetConnection>/<Properties> 요소

백엔드 서비스로의 HTTP 전송 속성입니다. 자세한 내용은 엔드포인트 속성 참조를 확인하세요.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <Properties>
        <Property name="allow.http10">true</Property>
        <Property name="request.retain.headers">
          User-Agent,Referer,Accept-Language
        </Property>
    </Properties>
</HTTPTargetConnection>
기본 해당 없음
Presence 선택
유형 해당 없음

<HTTPTargetConnection>/<LoadBalancer> 요소

하나 이상의 대상 서버를 호출하고 서버에서 부하 분산을 수행합니다. 샘플 섹션에서 호출 대상 서버 샘플을 참조하세요. 백엔드 서버 간 부하 분산도 참조하세요. ServiceCallout 정책과 경로 규칙을 사용하여 대상 서버를 호출하는 방법을 설명하는 대상 엔드포인트/서버 콜아웃도 참조하세요.

<HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="httpbin"/> <Server name="yahoo"/> </LoadBalancer> <Path>/get</Path> </HTTPTargetConnection>
기본 해당 없음
Presence 선택
유형 해당 없음

<LocalTargetConnection> 요소

로컬 프록시(즉, 동일한 조직 및 환경의 프록시)를 서비스 콜아웃의 대상으로 지정합니다.

타겟을 추가로 지정하려면 <APIProxy> 또는 <ProxyEndpoint> 요소를 사용하거나 <Path> 요소를 사용합니다.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
   <Path/>
</LocalTargetConnection>
기본 해당 없음
Presence 필수
유형 해당 없음

<LocalTargetConnection>/<APIProxy> 요소

로컬 호출의 타겟인 API 프록시의 이름입니다. 프록시는 호출을 수행하는 프록시와 동일한 조직 및 환경에 있어야 합니다.

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

<APIProxy> 요소와 함께 <ProxyEndpoint> 요소를 포함하여 호출의 대상이어야 하는 프록시 엔드포인트의 이름을 지정합니다.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
</LocalTargetConnection>
기본 해당 없음
Presence 필수
유형 문자열

<LocalTargetConnection>/<ProxyEndpoint> 요소

호출 대상이어야 하는 프록시 엔드포인트의 이름입니다. 이는 <APIProxy> 요소로 지정된 API 프록시의 프록시 엔드포인트입니다.

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>
기본 해당 없음
Presence 선택
유형 해당 없음

<LocalTargetConnection>/<Path> 요소

대상이 되는 엔드포인트의 경로입니다. 엔드포인트는 호출을 수행하는 프록시와 동일한 조직 및 환경의 프록시를 참조해야 합니다.

프록시 이름을 모르거나 의존할 수 없는 경우 <APIProxy>/<ProxyEndpoint> 쌍 대신 이를 사용하세요. 경로가 안정적인 대상일 수 있습니다.

<LocalTargetConnection>
   <Path>/data-manager</Path>
</LocalTargetConnection>
기본 해당 없음
Presence 선택
유형 해당 없음

스키마

흐름 변수

흐름 변수를 사용하면 HTTP 헤더, 메시지 콘텐츠 또는 흐름 컨텍스트를 기반으로 런타임 시 정책 및 흐름의 동적 동작을 사용 설정할 수 있습니다. ServiceCallout 정책이 실행된 후에 다음과 같은 사전 정의된 흐름 변수를 사용할 수 있습니다. 흐름 변수에 대한 자세한 내용은 흐름 변수 참조를 참조하세요.

ServiceCallouts에는 자체 요청과 응답이 있으며 변수를 통해 해당 데이터에 액세스할 수 있습니다. 기본 메시지는 request.*response.* 변수 프리픽스를 사용하므로 myrequest.*calloutResponse.* 프리픽스(ServiceCallout 구성의 기본값)를 사용하여 ServiceCallout 관련 메시지 데이터를 가져옵니다. 다음 표의 첫 번째 예시는 ServiceCallout에서 HTTP 헤더를 가져오는 방법을 보여줍니다.

변수 설명

다음은 ServiceCallout 요청과 응답 헤더를 가져오는 예시로 기본 요청 및 응답에서 헤더를 가져오는 방식과 유사합니다.

calloutResponse.header.HeaderName

myRequest.header.HeaderName

여기서 calloutResponse는 Service Callout의 Response 변수 이름이고 myRequest는 Request 변수 이름입니다. 예를 들면 다음과 같습니다.

calloutResponse.header.Content-Length

ServiceCallout 응답의 Content-Length 헤더를 반환합니다.

범위: ServiceCallout 전달부터
유형: 문자열
권한: 읽기/쓰기

ServiceCallout 요청 또는 응답의 메시지 헤더입니다. 예를 들어 API 프록시 대상이 http://example.com이고 ServiceCallout 대상이 http://mocktarget.apigee.net인 경우 이러한 변수는 http://mocktarget.apigee.net에 대한 콜아웃의 헤더입니다.

servicecallout.requesturi

범위: ServiceCallout 요청부터
유형: 문자열
권한: 읽기/쓰기

ServiceCallout 정책의 TargetEndpoint URI입니다. URI는 프로토콜 및 도메인 사양이 없는 TargetEndpoint URL입니다.

servicecallout.{policy-name}.target.url

범위: ServiceCallout 요청부터
유형: 문자열
권한: 읽기/쓰기

ServiceCallout의 대상 URL입니다.

calloutResponse.content

여기서 calloutResponse는 ServiceCallout 구성에서의 <Response> 변수 이름입니다.

범위: ServiceCallout 응답부터
유형: 문자열
권한: 읽기/쓰기

ServiceCallout의 응답 본문입니다.

servicecallout.{policy-name}.expectedcn

범위: ServiceCallout 요청부터
유형: 문자열
권한: 읽기/쓰기

ServiceCallout 정책에서 참조하는 TargetEndpoint의 일반적인 예상 이름입니다. 이는 TargetEndpoint가 TLS/SSL 엔드포인트를 참조하는 경우에만 의미가 있습니다.

servicecallout.{policy-name}.failed

범위: ServiceCallout 응답부터
유형: 부울
권한: 읽기/쓰기

정책의 성공, 참, 실패, 거짓 여부를 나타내는 부울입니다.

오류

이 섹션에서는 반환되는 오류 코드 및 오류 메시지와 이 정책이 오류를 트리거할 때 Apigee에서 설정한 오류 변수를 설명합니다. 오류를 처리하기 위해 오류 규칙을 개발 중인 경우, 이 정보는 중요합니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항오류 처리를 참조하세요.

런타임 오류

이러한 오류는 정책이 실행될 때 발생할 수 있습니다.

오류 코드 HTTP 상태 원인 해결
steps.servicecallout.ExecutionFailed 500

이 오류는 다음과 같은 때에 발생할 수 있습니다.

  • 정책이 잘못된 형식이나 유효하지 않은 입력을 처리하도록 요청받았을 때.
  • 백엔드 대상 서비스가 오류 상태를 반환할 때(기본적으로 4xx 또는 5xx).
steps.servicecallout.RequestVariableNotMessageType 500 정책에 지정된 Request 변수가 Message 유형이 아닙니다. 예를 들어 문자열이거나 기타 메시지 외 유형인 경우 이 오류가 표시됩니다.
steps.servicecallout.RequestVariableNotRequestMessageType 500 정책에 지정된 Request 변수가 RequestMessage 유형이 아닙니다. 예를 들어 응답 유형인 경우 이 오류가 표시됩니다.

배포 오류

이 오류는 이 정책이 포함된 프록시를 배포할 때 발생할 수 있습니다.

오류 이름 원인 해결
URLMissing <HTTPTargetConnection> 내의 <URL> 요소가 없거나 비어 있습니다.
ConnectionInfoMissing 이 오류는 정책에 <HTTPTargetConnection> 또는 <LocalTargetConnection> 요소가 없는 경우 발생합니다.
InvalidTimeoutValue 이 오류는 <Timeout> 값이 음수이거나 0이면 발생합니다.

오류 변수

이러한 변수는 런타임 오류가 발생하면 설정됩니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항을 참조하세요.

변수 각 항목의 의미는 다음과 같습니다.
fault.name="fault_name" fault_name은 위의 런타임 오류 표에 나열된 오류 이름입니다. 오류 이름은 오류 코드의 마지막 부분입니다. fault.name = "RequestVariableNotMessageType"
servicecallout.policy_name.failed policy_name은 오류를 발생시킨 정책의 사용자 지정 이름입니다. servicecallout.SC-GetUserData.failed = true

오류 응답 예시

{
   "fault":{
      "detail":{
         "errorcode":"steps.servicecallout.RequestVariableNotMessageType"
      },
      "faultstring":"ServiceCallout[ServiceCalloutGetMockResponse]:
            request variable data_str value is not of type Message"
   }
}

오류 규칙 예시

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="RequestVariableNotMessageType">
    <Step>
        <Name>AM-RequestVariableNotMessageType</Name>
    </Step>
    <Condition>(fault.name = "RequestVariableNotMessageType")</Condition>
</FaultRule>

관련 주제