정책 구성 사용

<ph type="x-smartling-placeholder"></ph> 현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

이 주제에서는 정책 구성을 사용하여 매시업을 만드는 방법을 알아봅니다. 정책 조합은 여러 백엔드의 결과를 결합할 수 있는 Apigee 프록시 패턴입니다. 단일 응답으로 표시할 수 있습니다

정책 구성에 대한 일반적인 개요는 '정책 구성 패턴'을 참조하세요. API 프록시 설명서 참조 패턴을 따라야 합니다.

샘플 코드 다운로드 및 사용해 보기

<ph type="x-smartling-placeholder">

이 레시피북 예시 정보

이 설명서는 정책 구성이라는 API 프록시 패턴을 보여줍니다. 이 패턴은 여러 백엔드 소스의 데이터를 매시업하는 한 가지 방법을 제공합니다. 좀 더 일반적으로 말하면, 이 주제는 정책을 다음과 같이 결합하여 정책을 결합하고 연결하는 방법을 보여줍니다. 원하는 결과를 생성합니다. 이 패턴 및 기타 관련 패턴에 대한 일반적인 개요는 API 프록시 설명서 패턴을 따라야 합니다.

여기서 설명하는 예에서는 정책 구성을 사용하여 이 두 개의 개별적인 데이터를 매시업합니다. 공개 API:

  • Google 지오코딩 API: 이 API는 주소를 변환합니다 (예: '1600 Amphitheatre Parkway, Mountain View, CA'). 을 지리 좌표 (예: 위도 37.423021 및 경도 -122.083739)로 변환합니다.
  • Google 고도 API 이 API는 전 세계 위치의 고도를 쿼리할 수 있는 간단한 인터페이스를 제공합니다. 데이터입니다. 이 예에서는 Geocoding API에서 반환된 좌표가 입력으로 사용됩니다. 이 API에 가져올 수 있습니다.

앱 개발자는 두 개의 쿼리 매개변수(우편번호 및 국가)를 사용하여 이 API 프록시를 호출합니다. ID:

$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"

응답은 다음에 대한 지오코딩된 위치 (위도/경도)를 포함하는 JSON 객체입니다. 지오코딩된 해당 지역의 고도와 결합된 제공된 우편번호 지역의 중심 볼 수 있습니다

{  
   "ElevationResponse":{  
      "status":"OK",
      "result":{  
         "location":{  
            "lat":"39.7500713",
            "lng":"-74.1357407"
         },
         "elevation":"0.5045232",
         "resolution":"76.3516159"
      }
   }
}

시작하기 전에

정책 구성 패턴에 대한 간략한 개요는 구성 패턴" API 프록시 설명서 참조 패턴을 따라야 합니다.

이 레시피북 예시를 살펴보기 전에 개념:

  • 정책의 정의 및 프록시에 연결하는 방법 정책에 대한 좋은 소개를 위해 자세한 내용은 API란 정책?을 참조하세요.
  • 흐름 구성에 설명된 API 프록시 흐름의 구조 Flow를 사용하면 API 프록시에서 정책을 실행하는 순서를 지정합니다. 이 예에서는 정책이 생성되어 API 프록시의 흐름에 추가됩니다.
  • API 프록시 프로젝트가 파일 시스템에서 구성되는 방식(다음 참조) API 프록시 구성 참조 이 설명서 주제는 로컬 개발 과정을 보여줍니다 (파일 시스템 기반)는 관리 UI를 사용하여 특정 작업을 수행할 수 있는 클라우드 기반 개발과 달리 API 프록시를 개발할 수 있습니다
  • API 키 검증 사용 이는 가장 단순한 형태의 앱 기반 보안으로 API를 구성할 수 있습니다 자세한 내용은 API 키를 사용하는 것이 좋습니다. 또한 보안 API 키를 사용하도록 권장하기 튜토리얼을 참고하세요.
  • XML에 관한 실무 지식 이 예에서는 API 프록시를 빌드하고 정책을 정의하는 데 사용됩니다.

샘플 코드를 다운로드했다면 여기에서 설명한 모든 파일을 찾을 수 있습니다. mashup-policy-cookbook 샘플 폴더에 있습니다. 다음 섹션 샘플 코드에 대해 자세히 논의할 것입니다.

흐름을 따르는 순응자

정책으로 이동하기 전에 이 예시의 주요 흐름을 살펴보겠습니다. API 프록시 아래에 표시된 흐름 XML은 이 프록시와 프록시에 적용되는 정책에 대해 해당 정책이 호출되는 위치

샘플 다운로드의 파일에서 이 XML을 찾을 수 있습니다. doc-samples/policy-mashup-cookbook/apiproxy/proxies/default.xml

<ProxyEndpoint name="default">
  <Flows>
    <Flow name="default">
      <Request>
            <!-- Generate request message for the Google Geocoding API -->
            <Step><Name>GenerateGeocodingRequest</Name></Step>
            <!-- Call the Google Geocoding API -->
            <Step><Name>ExecuteGeocodingRequest</Name></Step>
            <!-- Parse the response and set variables -->
            <Step><Name>ParseGeocodingResponse</Name></Step>
            <!-- Generate request message for the Google Elevation API -->
            <Step><Name>AssignElevationParameters</Name></Step>
      </Request>
      <Response>
            <!-- Parse the response message from the Elevation API -->
            <Step><Name>ParseElevationResponse</Name></Step>
            <!-- Generate the final JSON-formatted response with JavaScript -->
            <Step><Name>GenerateResponse</Name></Step>
      </Response>
    </Flow>
  </Flows>

  <HTTPProxyConnection>
    <!-- Add a base path to the ProxyEndpoint for URI pattern matching-->
    <BasePath>/policy-mashup-cookbook</BasePath>
    <!-- Listen on both HTTP and HTTPS endpoints -->
    <VirtualHost>default</VirtualHost>
    <VirtualHost>secure</VirtualHost>
  </HTTPProxyConnection>
  <RouteRule name="default">
    <!-- Connect ProxyEndpoint to named TargetEndpoint under /targets -->
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

다음은 흐름의 요소를 요약한 것입니다.

  • &lt;Request&gt; - <Request> 요소는 여러 개의 &lt;Step&gt; 요소 각 단계에서는 정책 중 하나를 호출하고 나머지 단계를 통해 만듭니다 이 주제에 대해 자세히 살펴보겠습니다. 이 정책은 요청 메시지 작성, 전송 및 응답을 파싱합니다. 이 주제를 마치면 이러한 각각의 역할을 이해할 수 있게 됩니다. 정책
  • &lt;Response&gt; - <Response> 요소에는 <Steps>. 이러한 단계에서는 최종 도착 대상 엔드포인트 (Google Elevation API)에서 전송합니다.
  • &lt;HttpProxyConnection&gt; - 이 요소는 서비스에 대한 세부정보를 앱이 이 API 프록시에 연결되는 방식(예: 이 API가 호출됩니다.
  • &lt;RouteRule&gt; - 이 요소는 즉시 발생하는 작업을 지정합니다. 수신 요청 메시지가 처리된 후 이 경우 TargetEndpoint가 호출됩니다. 이 중요한 단계에 대해서는 이 주제의 뒷부분에서 자세히 설명하겠습니다.

정책 만들기

다음 섹션에서는 이 정책 구성을 구성하는 각 정책에 대해 설명합니다. 예로 들 수 있습니다

첫 번째AssignMessage 만들기 정책

첫 번째 AssignMessage 정책 는 Google 지오코딩 있습니다.

먼저 정책 코드부터 살펴본 다음 해당 요소를 자세히 설명하겠습니다. 샘플 다운로드 파일은 doc-samples/policy-mashup-cookbook/apiproxy/policies/GenerateGeocodingRequest.xml

<AssignMessage name="GenerateGeocodingRequest">
  <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
      <QueryParam name="region">{request.queryparam.country}</QueryParam>
      <QueryParam name="sensor">false</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <!-- Set variables for use in the final response -->
  <AssignVariable>
    <Name>PostalCode</Name>
    <Ref>request.queryparam.postalcode</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

다음은 이 정책의 요소에 대한 간략한 설명입니다. 자세한 내용은 할당 메일 정책.

  • <AssignMessage name> - 정책에 이름을 지정합니다. 이름은 흐름에서 정책이 참조될 때 사용됩니다.
  • &lt;AssignTo&gt; - GeocodingRequest라는 이름이 지정된 변수를 만듭니다. 이 변수는 Service콜아웃 정책.
  • &lt;QueryParams&gt; - 쿼리 매개변수에서 백엔드 API 호출 이 경우 Geocoding API는 우편번호, 국가 ID로 표현됩니다. 앱 사용자가 이 정보를 제공합니다. 여기에 추출해 보겠습니다. sensor 매개변수는 API에 필요하며 true 또는 false이며 여기서는 false로 하드코딩합니다.
  • &lt;Verb&gt; - 이 경우 API에 액세스할 수 있습니다.
  • &lt;AssignVariable&gt; - 이 변수는 현재 값을 저장합니다. API에 전달됩니다 이 예에서는 나중에 응답에서 변수에 액세스합니다. 클라이언트로 반환됩니다.

Service콜아웃을 사용하여 요청 전송

정책 구성 시퀀스의 다음 단계는 ServiceCallout 정책을 만드는 것입니다. 이 아래에 나와 있는 Service콜아웃 정책은 이전AssignMessage 정책을 Google 지오코딩 서비스에 추가하고 결과를 GeocodingResponse라는 변수가 추가되었습니다.

이전과 마찬가지로 먼저 코드를 살펴보겠습니다. 자세한 설명은 다음과 같습니다. 읽을 수 있는 콘텐츠 이 정책에 대한 자세한 내용은 서비스 콜아웃 정책을 참조하세요. 샘플 다운로드의 파일에서 이 XML을 찾을 수 있습니다. doc-samples/policy-mashup-cookbook/apiproxy/policies/ExecuteGeocodingRequest.xml

<ServiceCallout name="ExecuteGeocodingRequest">
  <Request variable="GeocodingRequest"/>
  <Response>GeocodingResponse</Response>
  <HTTPTargetConnection>
    <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
  </HTTPTargetConnection>
</ServiceCallout>

다음은 이 정책의 요소에 대한 간략한 설명입니다.

  • &lt;ServiceCallout&gt; - 이전 정책과 마찬가지로 이 정책에는 있습니다.
  • <Request 변수> - 이 변수가 할당 메시지 정책 백엔드 API로 전달되는 요청을 캡슐화합니다.
  • &lt;Response&gt; - 이 요소는 응답의 응답을 나타내는 변수의 이름을 지정합니다. 확인할 수 있습니다 보시다시피 나중에 ExtractVariables에서 이 변수에 액세스합니다. 정책
  • &lt;HTTPTargetConnection&gt; - 백엔드의 대상 URL을 지정합니다. API에 액세스할 수 있습니다. 이 경우 API가 JSON 응답을 반환하도록 지정합니다.

이제 두 가지 정책이 있습니다. 하나는 백엔드 API (Google의 Geocoding API), 그리고 실제로 요청을 백엔드 API입니다 다음으로 응답을 처리합니다.

다음을 사용하여 응답 파싱 ExtractVariables

ExtractVariables 정책은 응답 메시지를 가져옵니다. ExtractVariables를 사용하여 JSON 또는 XML이거나 URI 경로, HTTP 헤더, 쿼리에서 콘텐츠를 추출하는 데 사용할 수 있습니다. 매개변수, 양식 매개변수 등이 있습니다.

다음은 ExtractVariables 정책의 목록입니다. 이 정책에 대한 자세한 내용은 다음 페이지를 참조하세요. 변수 추출 정책을 참조하세요. 샘플 다운로드의 파일에서 이 XML을 찾을 수 있습니다. doc-samples/policy-mashup-cookbook/apiproxy/policies/ParseGeocodingResponse.xml

<ExtractVariables name="ParseGeocodingResponse">
  <Source>GeocodingResponse</Source>
  <VariablePrefix>geocoderesponse</VariablePrefix>
  <JSONPayload>
    <Variable name="latitude">
       <JSONPath>$.results[0].geometry.location.lat</JSONPath>
    </Variable>
    <Variable name="longitude">
       <JSONPath>$.results[0].geometry.location.lng</JSONPath>
    </Variable>
  </JSONPayload>
</ExtractVariables>

ExtractVariable 정책의 핵심 요소는 다음과 같습니다.

  • <ExtractVariables name> - 정책 이름은 정책을 참조할 수 있습니다
  • &lt;Source&gt; - 앞서 만든 응답 변수를 지정합니다. Service콜아웃 정책 이 정책이 데이터를 추출하는 변수입니다.
  • &lt;VariablePrefix&gt; - 변수 접두사는 이 정책에서 생성된 다른 변수입니다. 프리픽스는 예약된 이름을 제외한 모든 이름이 될 수 있습니다. Edge의 사전 정의된 변수입니다.
  • &lt;JSONPayload&gt; - 이 요소는 명명된 변수에 저장합니다. 실제로 Geocoding API는 위도와 경도보다 더 많은 정보를 제공합니다. 하지만 이것들이 확인할 수 있습니다 Geocoding API에서 반환한 JSON의 전체 렌더링을 확인할 수 있습니다. API의 문서를 참조하세요. metric.location.lat 및 metric.location.lng 값은 단순히 두 개의 JSON 객체를 반환합니다.

명확하지 않을 수도 있지만 ExtractVariables가 두 개의 이름이 변수 접두사 (지오코드 응답) 및 실제 정책에서 지정된 변수 이름입니다. 이러한 변수는 API 프록시에 액세스하고 프록시 흐름 내의 다른 정책에서 사용할 수 있습니다. 볼 수 있습니다 변수는 다음과 같습니다.

  • geocoderesponse.latitude
  • geocoderesponse.longitude

이제 대부분의 작업이 완료되었습니다. Google은 AI 원칙 2가지를 구성하는 세 가지 정책을 백엔드 API를 호출하고 반환된 JSON 데이터를 파싱합니다. 마지막 단계에서는 흐름의 이 부분에서 다른AssignMessage 정책으로 데이터를 가져오려면 두 번째 백엔드를 호출합니다. API (Google Elevation API)를 통해 매시업된 데이터를 앱 개발자에게 반환할 수 있습니다.

두 번째 VerifyMessage를 사용한 요청

다음AssignMessage 정책은 첫 번째 백엔드 (Google 지오코딩)하고 두 번째 API (Google 고도). 앞서 언급했듯이 이러한 변수는 지오코드 응답.위도이고 geocoderesponse.longitude.

샘플 다운로드의 파일에서 이 XML을 찾을 수 있습니다. doc-samples/policy-mashup-cookbook/apiproxy/policies/AssignElevationParameters.xml

<AssignMessage name="AssignElevationParameters">
<Remove>
    <QueryParams>
      <QueryParam name="country"/>
      <QueryParam name="postalcode"/>
    </QueryParams>
  </Remove>
  <Set>
    <QueryParams>
      <QueryParam name="locations">{geocoderesponse.latitude},{geocoderesponse.longitude}</QueryParam>
      <QueryParam name="sensor">false</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

Google Elevation API를 검사하면 두 개의 쿼리 매개변수가 필요하다는 것을 알 수 있습니다. 첫 번째는 locations라고 하며 값은 위도와 경도입니다. (쉼표로 구분된 값). 다른 매개변수는 sensor입니다. 이는 필수 항목이며 true 또는 false입니다. 이 시점에서 가장 중요한 점은 요청이 메시지에는 Service콜아웃이 필요하지 않습니다. 두 번째 포드는 API를 사용할 수 있습니다. 프록시의 콜백에서 백엔드 API를 호출할 수 있기 때문입니다. TargetEndpoint를 반환합니다. 생각해보면 Google Elevations라고 부르는 데 필요한 모든 데이터가 있습니다. API 기본 요청 파이프라인에 대해 생성되므로 ProxyEndpoint를 TargetEndpoint로 연결합니다. 이 API 프록시에 구성된 RouteRule을 따릅니다. TargetEndpoint는 원격 API와의 연결을 관리합니다. ( Elevation API는 TargetEndpoint의 HTTPConnection에 정의됩니다. 고도 API 문서를 참조하세요. 이전에 저장한 QueryParams는 countrypostalcode이(가) 더 이상 필요하지 않으므로 삭제됩니다. 여기에서 확인하세요.

짧은 일시중지: 과정으로 돌아가기

이 시점에서 또 다른 Service콜아웃 정책을 만들지 않은 이유가 궁금할 수 있습니다. 후(After) 또 다른 메시지를 만들었죠. 해당 메시지가 표적, 즉 Google Elevation API? 답은 <RouteRule>에 있습니다. 요소가 없습니다. &lt;RouteRule&gt; <Request> 일부 확인할 수 있습니다 이 <RouteRule>으로 지정된 TargetEndpoint입니다. 는 메시지를 전송하기 위한 API 프록시 http://maps.googleapis.com/maps/api/elevation/xml님에게 전송됩니다.

샘플 API 프록시를 다운로드한 경우 이 파일에서 TargetProxy XML을 찾을 수 있습니다. doc-samples/policy-mashup-cookbook/apiproxy/targets/default.xml

<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <!-- This is where we define the target. For this sample we just use a simple URL. -->
    <URL>http://maps.googleapis.com/maps/api/elevation/xml</URL>
  </HTTPTargetConnection>
</TargetEndpoint>

이제 Google Elevation API의 응답을 처리하기만 하면 완료되었습니다.

응답을 XML에서 JSON

이 예에서 Google Elevation API의 응답은 XML로 반환됩니다. '추가' 신용' 구성 파일에 정책을 하나 더 추가하여 응답을 XML에서 JSON입니다.

이 예시에서는 리소스 파일과 함께 GenerateResponse라는 JavaScript 정책을 사용합니다. 있어야 합니다. 아래에 표시된 것은 GenerateResponse 정책 정의가 포함됩니다.

<Javascript name="GenerateResponse" timeout="10000">
  <ResourceURL>jsc://GenerateResponse.js</ResourceURL>
</Javascript>

GenerateResponse.js 리소스 파일에는 알 수 있습니다. 이 코드는 파일 doc-samples/policy-mashup-cookbook/apiproxy/resources/JSC/GenerateResponse.js.

Apigee는 XML을 JSON으로 변환하는 즉시 사용 가능한 정책인 XMLToJSON도 제공합니다. 다음을 수행할 수 있습니다. 아래에 표시된 xmltojson 정책을 사용하도록 ProxyEndpoint를 수정하세요. 하세요.

<XMLToJSON name="xmltojson">
  <Options>
  </Options>
  <OutputVariable>response</OutputVariable>
  <Source>response</Source>
</XMLToJSON>

예시 테스트

아직 실행하지 않았다면 지금 다운로드, 배포, Apigee Edge 샘플 저장소 GitHub의 doc-samples 폴더에서 찾을 수 있는 policy-mashup-cookbook 샘플입니다. 단 policy-mashup-cookbook 폴더에 있는 README 파일의 안내를 따르세요. 또는 다음 간단한 지침을 따르세요. 샘플 API 프록시를 참조하세요.

요약하면 다음과 같이 복합 API를 호출할 수 있습니다. {myorg}를 조직 이름:

$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"

응답에는 앱 최종 사용자의 값을 해당 지오코딩된 위치의 고도와 결합합니다. 데이터는 2개의 백엔드 API에서 검색되고 API 프록시에 연결된 정책과 매시업됩니다. 클라이언트에게 반환됩니다.

{  
   "country":"us",
   "postalcode":"08008",
   "elevation":{  
      "meters":0.5045232,
      "feet":1.6552599030345978
   },
   "location":{  
      "latitude":39.75007129999999,
      "longitude":-74.1357407
   }
}

요약

이 설명서 주제에서는 정책 구성 패턴을 사용하여 매시업을 만드는 방법을 설명했습니다. 여러 백엔드 소스의 데이터 수집을 지원합니다 정책 구성은 API에서 사용되는 일반적인 패턴 API에 광고 소재 기능을 추가하기 위한 프록시 개발입니다.