การใช้องค์ประกอบนโยบาย

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

ในหัวข้อนี้ คุณจะได้เรียนรู้วิธีสร้าง Mashup โดยใช้ การประกอบนโยบาย การประกอบนโยบายเป็นรูปแบบพร็อกซีของ Apigee ที่ช่วยให้คุณรวมผลลัพธ์จากเป้าหมายแบ็กเอนด์หลายรายการ ไว้ในการตอบกลับเดียวโดยใช้นโยบาย

หากต้องการดูภาพรวมทั่วไปของการประกอบนโยบาย โปรดดู "รูปแบบการประกอบนโยบาย" ใน รูปแบบ Cookbook ของ API Proxy

ดาวน์โหลดและลองใช้โค้ดตัวอย่าง

เกี่ยวกับตัวอย่าง Cookbook นี้

ตัวอย่าง Cookbook นี้แสดงรูปแบบพร็อกซี API ที่เรียกว่า การประกอบนโยบาย รูปแบบนี้เป็นวิธีหนึ่ง (ยังมีวิธีอื่นๆ อีก) ในการ Mashup ข้อมูลจากแหล่งที่มาแบ็กเอนด์หลายแหล่ง โดยทั่วไปแล้ว หัวข้อนี้จะแสดงให้เห็นว่าสามารถรวมและเชื่อมโยงนโยบายเข้าด้วยกันเพื่อ สร้างผลลัพธ์ที่ต้องการได้อย่างไร หากต้องการดูภาพรวมทั่วไปของรูปแบบนี้และรูปแบบอื่นๆ ที่เกี่ยวข้อง โปรดดู รูปแบบ Cookbook ของ API Proxy

ตัวอย่างที่กล่าวถึงในที่นี้ใช้การประกอบนโยบายเพื่อ Mashup ข้อมูลจาก API สาธารณะ 2 รายการที่แยกกัน ดังนี้

  • Google Geocoding API: API นี้จะแปลงที่อยู่ (เช่น "1600 Amphitheatre Parkway, Mountain View, CA") เป็นพิกัดทางภูมิศาสตร์ (เช่น ละติจูด 37.423021 และลองจิจูด -122.083739)
  • Google Elevation API: API นี้มีอินเทอร์เฟซที่ใช้งานง่ายสำหรับการค้นหาข้อมูลระดับความสูงของสถานที่ต่างๆ บนโลก ในตัวอย่างนี้ ระบบจะใช้พิกัดที่แสดงผลจาก Geocoding API เป็นข้อมูลป้อนเข้า ใน API นี้

นักพัฒนาแอปจะเรียกพร็อกซี API นี้ด้วยพารามิเตอร์การค้นหา 2 รายการ ได้แก่ รหัสไปรษณีย์และรหัสประเทศ

$ 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"
      }
   }
}

ก่อนเริ่มต้น

หากต้องการอ่านภาพรวมย่อของรูปแบบการประกอบนโยบาย โปรดดู "รูปแบบการประกอบนโยบาย" ใน รูปแบบ Cookbook ของ API Proxy

นอกจากนี้ คุณควรทำความคุ้นเคยกับแนวคิดพื้นฐานต่อไปนี้ก่อนที่จะสำรวจตัวอย่าง Cookbook นี้

  • นโยบายคืออะไรและวิธีแนบนโยบายกับพร็อกซี หากต้องการดูข้อมูลเบื้องต้นเกี่ยวกับนโยบาย โปรดดูหัวข้อนโยบายคืออะไร
  • โครงสร้างของโฟลว์พร็อกซี API ตามที่อธิบายไว้ในหัวข้อ การกำหนดค่าโฟลว์ โฟลว์ช่วยให้คุณ ระบุลำดับที่พร็อกซี API จะดำเนินการตามนโยบาย ในตัวอย่างนี้ เราจะสร้างและเพิ่มนโยบายหลายรายการ ลงในโฟลว์ของพร็อกซี API
  • วิธีจัดระเบียบโปรเจ็กต์พร็อกซี API ในระบบไฟล์ ตามที่อธิบายไว้ใน เอกสารอ้างอิงการกำหนดค่าพร็อกซี API หัวข้อ Cookbook นี้แสดงการพัฒนาในเครื่อง (อิงตามระบบ ไฟล์) ซึ่งแตกต่างจากการพัฒนาบนระบบคลาวด์ที่คุณสามารถใช้ UI การจัดการเพื่อ พัฒนาพร็อกซี API ได้
  • การใช้การตรวจสอบคีย์ API นี่คือรูปแบบที่ง่ายที่สุดของการรักษาความปลอดภัยที่อิงตามแอป ซึ่งคุณสามารถ กำหนดค่าสำหรับ API ได้ ดูข้อมูลเพิ่มเติมได้ที่ API คีย์ นอกจากนี้ คุณยังทำตามบทแนะนำการรักษาความปลอดภัย API โดยกำหนดให้ใช้คีย์ API ได้ด้วย
  • ความรู้พื้นฐานเกี่ยวกับ XML ในตัวอย่างนี้ เราจะสร้างพร็อกซี API และนโยบายของพร็อกซีด้วยไฟล์ XML ที่อยู่ในระบบไฟล์

หากคุณดาวน์โหลดโค้ดตัวอย่าง คุณจะพบไฟล์ทั้งหมดที่กล่าวถึงในหัวข้อนี้ใน โฟลเดอร์ตัวอย่าง 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>

ต่อไปนี้คือข้อมูลสรุปขององค์ประกอบของโฟลว์

  • <Request> - องค์ประกอบ <Request> ประกอบด้วยองค์ประกอบ <Step> หลายรายการ แต่ละขั้นตอนจะเรียกนโยบายรายการใดรายการหนึ่งที่เราจะสร้างขึ้นในส่วนที่เหลือ ของหัวข้อนี้ นโยบายเหล่านี้เกี่ยวข้องกับการสร้างข้อความคำขอ การส่งข้อความ และ การแยกวิเคราะห์การตอบกลับ เมื่อจบบทความนี้ คุณจะเข้าใจบทบาทของนโยบายแต่ละรายการ
  • <Response> - องค์ประกอบ <Response> ยังมี <Steps> ด้วย โดยขั้นตอนเหล่านี้จะเรียกนโยบายที่รับผิดชอบในการประมวลผลการตอบกลับสุดท้ายจากปลายทางเป้าหมาย (Google Elevation API)
  • <HttpProxyConnection> - องค์ประกอบนี้จะระบุรายละเอียดเกี่ยวกับ วิธีที่แอปจะเชื่อมต่อกับพร็อกซี API นี้ รวมถึง <BasePath> ซึ่งระบุวิธี เรียก API นี้
  • <RouteRule> - องค์ประกอบนี้จะระบุสิ่งที่เกิดขึ้นทันที หลังจากประมวลผลข้อความคำขอขาเข้า ในกรณีนี้ ระบบจะเรียก TargetEndpoint เราจะพูดถึงขั้นตอนสำคัญนี้เพิ่มเติมในภายหลังของหัวข้อนี้

การสร้างนโยบาย

ส่วนต่อไปนี้จะอธิบายนโยบายแต่ละรายการที่ประกอบกันเป็นตัวอย่างการประกอบนโยบายนี้

สร้างนโยบาย AssignMessage รายการแรก

นโยบาย AssignMessage รายการแรก ที่แสดงด้านล่างจะสร้างข้อความคำขอที่จะส่งไปยังบริการ Google Geocoding

มาเริ่มจากโค้ดนโยบายก่อน แล้วเราจะอธิบายองค์ประกอบของโค้ดโดยละเอียด ในตัวอย่างที่ดาวน์โหลด คุณจะพบ XML นี้ในไฟล์ 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>

ต่อไปนี้คือคำอธิบายย่อขององค์ประกอบในนโยบายนี้ อ่านเพิ่มเติมเกี่ยวกับนโยบายนี้ได้ในนโยบาย Assign Message

  • <AssignMessage name> - ตั้งชื่อนโยบายนี้ ระบบจะใช้ชื่อนี้ เมื่อมีการอ้างอิงนโยบายในโฟลว์
  • <AssignTo> - สร้างตัวแปรที่มีชื่อว่า GeocodingRequest ตัวแปรนี้จะห่อหุ้มออบเจ็กต์คำขอที่จะส่งไปยังแบ็กเอนด์โดย นโยบาย ServiceCallout
  • <QueryParams> - ตั้งค่าพารามิเตอร์การค้นหาที่การเรียก API แบ็กเอนด์ต้องใช้ ในกรณีนี้ Geocoding API ต้องทราบตำแหน่ง ซึ่งแสดงด้วยรหัสไปรษณีย์และรหัสประเทศ ผู้ใช้แอปเป็นผู้ระบุข้อมูลนี้ และ เราเพียงแค่ดึงข้อมูลนี้ออกมา API กำหนดให้ใช้พารามิเตอร์ sensor ซึ่งมีค่าเป็น จริงหรือเท็จ และเราเพียงแค่กำหนดค่าเป็นเท็จไว้ที่นี่
  • <Verb> - ในกรณีนี้ เราจะส่งคำขอ GET อย่างง่ายไปยัง API
  • <AssignVariable> - ตัวแปรเหล่านี้จะจัดเก็บค่าที่เรา ส่งไปยัง API ในตัวอย่างนี้ เราจะเข้าถึงตัวแปรเหล่านี้ในภายหลังในการตอบกลับ ที่ส่งคืนไปยังไคลเอ็นต์

ส่งคำขอด้วย ServiceCallout

ขั้นตอนถัดไปในลำดับการประกอบนโยบายคือการสร้างนโยบาย ServiceCallout นโยบาย ServiceCallout ที่แสดงด้านล่างจะส่งออบเจ็กต์คำขอที่เราสร้างขึ้นใน นโยบาย AssignMessage ก่อนหน้าไปยังบริการ Google Geocoding และบันทึกผลลัพธ์ใน ตัวแปรที่ชื่อว่า GeocodingResponse

เช่นเดียวกับก่อนหน้านี้ เรามาดูโค้ดกันก่อน จากนั้นจะมีการอธิบายโดยละเอียด อ่านเพิ่มเติมเกี่ยวกับนโยบายนี้ได้ในนโยบาย Service Callout policy ในตัวอย่างที่ดาวน์โหลด คุณจะพบ 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>

ต่อไปนี้คือคำอธิบายย่อขององค์ประกอบของนโยบายนี้

  • <ServiceCallout> - นโยบายนี้มี ชื่อเช่นเดียวกับนโยบายก่อนหน้า
  • <Request variable> - นี่คือตัวแปรที่สร้างขึ้นใน นโยบาย AssignMessage ตัวแปรนี้จะห่อหุ้มคำขอที่ส่งไปยัง API แบ็กเอนด์
  • <Response> - องค์ประกอบนี้จะตั้งชื่อตัวแปรที่จะจัดเก็บการตอบกลับ คุณจะเห็นว่านโยบาย ExtractVariables จะเข้าถึงตัวแปรนี้ในภายหลัง
  • <HTTPTargetConnection> - ระบุ URL เป้าหมายของ API แบ็กเอนด์ ในกรณีนี้ เราจะระบุให้ API แสดงผลการตอบกลับ JSON

ตอนนี้เรามีนโยบาย 2 รายการแล้ว รายการแรกระบุข้อมูลคำขอที่จำเป็นในการใช้ API แบ็กเอนด์ (Google Geocoding API) และรายการที่ 2 จะส่งคำขอไปยัง API แบ็กเอนด์ จากนั้นเราจะจัดการการตอบกลับ

แยกวิเคราะห์การตอบกลับด้วย ExtractVariables

นโยบาย ExtractVariables มีกลไกง่ายๆ สำหรับการแยกวิเคราะห์เนื้อหาจาก ข้อความการตอบกลับที่ได้รับจากนโยบาย ServiceCallout คุณสามารถใช้นโยบาย ExtractVariables เพื่อแยกวิเคราะห์ JSON หรือ XML หรือใช้เพื่อแยกเนื้อหาจากเส้นทาง URI, ส่วนหัว HTTP, พารามิเตอร์การค้นหา และพารามิเตอร์แบบฟอร์ม

ต่อไปนี้คือรายการนโยบาย ExtractVariables อ่านเพิ่มเติมเกี่ยวกับนโยบายนี้ได้ใน นโยบาย Extract Variables. ในตัวอย่างที่ดาวน์โหลด คุณจะพบ 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> - อีกครั้งที่ชื่อนโยบายจะใช้เพื่อ อ้างอิงนโยบายเมื่อมีการใช้นโยบายในโฟลว์
  • <Source> - ระบุตัวแปรการตอบกลับที่เราสร้างขึ้นใน นโยบาย ServiceCallout นี่คือตัวแปรที่นโยบายนี้จะดึงข้อมูลออกมา
  • <VariablePrefix> - คำนำหน้าตัวแปรจะระบุเนมสเปซสำหรับ ตัวแปรอื่นๆ ที่สร้างขึ้นในนโยบายนี้ คำนำหน้าจะเป็นชื่อใดก็ได้ ยกเว้นชื่อที่สงวนไว้ซึ่งกำหนดโดยตัวแปรที่กำหนดไว้ล่วงหน้าของ Edge
  • <JSONPayload> - องค์ประกอบนี้จะดึงข้อมูลการตอบกลับที่เราสนใจและใส่ข้อมูลนั้นลงในตัวแปรที่มีชื่อ ในความเป็นจริง Geocoding API จะแสดงข้อมูลมากกว่าละติจูดและลองจิจูด อย่างไรก็ตาม ค่าเหล่านี้เป็นค่าเดียวที่เราต้องการ สำหรับตัวอย่างนี้ คุณดูการแสดงผล JSON ที่สมบูรณ์ซึ่งแสดงผลโดย Geocoding API ได้ในเอกสารประกอบของ API ค่าของ geometry.location.lat และ geometry.location.lng เป็นเพียง 2 ในหลายๆ ช่องในออบเจ็กต์ JSON ที่แสดงผล

คุณอาจไม่สังเกต แต่สิ่งสำคัญคือต้องทราบว่านโยบาย ExtractVariables จะสร้างตัวแปร 2 รายการ ที่มีชื่อประกอบด้วยคำนำหน้าตัวแปร (geocoderesponse) และชื่อตัวแปรจริง ที่ระบุไว้ในนโยบาย ตัวแปรเหล่านี้จะจัดเก็บไว้ใน พร็อกซี API และนโยบายอื่นๆ ภายในโฟลว์พร็อกซีจะเข้าถึงได้ ดังที่คุณจะ เห็น ตัวแปรมีดังนี้

  • geocoderesponse.latitude
  • geocoderesponse.longitude

ตอนนี้เราทำเกือบเสร็จแล้ว เราได้สร้างนโยบาย 3 รายการที่ประกอบกันเป็นคำขอ เรียก API แบ็กเอนด์ และแยกวิเคราะห์ข้อมูล JSON ที่แสดงผล ในขั้นตอนสุดท้าย เราจะป้อน ข้อมูลจากส่วนนี้ของโฟลว์ลงในนโยบาย AssignMessage อีกรายการหนึ่ง เรียก API แบ็กเอนด์รายการที่ 2 (Google Elevation API) และแสดงผลข้อมูล Mashup กลับไปยังนักพัฒนาแอป

สร้างคำขอที่ 2 ด้วย AssignMessage

นโยบาย AssignMessage ต่อไปนี้จะใช้ตัวแปรที่แสดงผลจากแบ็กเอนด์รายการแรก (Google Geocoding) ที่เราจัดเก็บไว้ และเสียบตัวแปรเหล่านั้นลงในคำขอที่ส่งไปยัง API รายการที่ 2 (Google Elevation) ดังที่กล่าวไว้ก่อนหน้านี้ ตัวแปรเหล่านี้คือ geocoderesponse.latitude และ 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 คุณจะเห็นว่า API นี้ใช้พารามิเตอร์การค้นหา 2 รายการ รายการแรกชื่อว่า locations และค่าของพารามิเตอร์นี้คือละติจูดและลองจิจูด (ค่าที่คั่นด้วยคอมมา) ส่วนพารามิเตอร์อีกรายการหนึ่งคือ sensor ซึ่งเป็นพารามิเตอร์ที่จำเป็นและต้อง มีค่าเป็นจริงหรือเท็จ สิ่งสำคัญที่สุดที่ต้องทราบในตอนนี้คือข้อความคำขอที่เราสร้างขึ้นที่นี่ไม่จำเป็นต้องใช้ ServiceCallout เราไม่จำเป็นต้องเรียก API รายการที่ 2 จาก ServiceCallout ในตอนนี้ เนื่องจากเราสามารถเรียก API แบ็กเอนด์จาก TargetEndpoint ของพร็อกซีได้ ลองพิจารณาดู เรามีข้อมูลทั้งหมดที่จำเป็นในการเรียก Google Elevations API แล้ว ข้อความคำขอที่สร้างขึ้นในขั้นตอนนี้ไม่จำเป็นต้องใช้ ServiceCallout เนื่องจาก คำขอที่สร้างขึ้นสำหรับไปป์ไลน์คำขอหลัก และดังนั้น ProxyEndpoint จะส่งต่อคำขอไปยัง TargetEndpoint ตาม RouteRule ที่กำหนดค่าไว้สำหรับพร็อกซี API นี้ TargetEndpoint จะจัดการการเชื่อมต่อกับ API ระยะไกล (โปรดทราบว่า URL สำหรับ Elevation API กำหนดไว้ใน HTTPConnection สำหรับ TargetEndpoint) เอกสารประกอบของ Elevation API หากคุณต้องการทราบข้อมูลเพิ่มเติม เราไม่จำเป็นต้องใช้ QueryParams ที่เราจัดเก็บไว้ก่อนหน้านี้ ได้แก่ country และ postalcode อีกต่อไป จึงนำออกที่นี่

หยุดชั่วคราวแล้วกลับไปที่โฟลว์

ในตอนนี้ คุณอาจสงสัยว่าทำไมเราจึงไม่สร้างนโยบาย ServiceCallout อีกรายการหนึ่ง เนื่องจากเราสร้างข้อความอีกรายการหนึ่ง ข้อความนั้นจะถูกส่งไปยังเป้าหมาย ซึ่งก็คือ Google Elevation API ได้อย่างไร คำตอบอยู่ในองค์ประกอบ <RouteRule> ของโฟลว์ <RouteRule> จะระบุสิ่งที่ต้องทำกับข้อความคำขอที่เหลือหลังจากที่ส่วน <Request> ของ โฟลว์ทำงานเสร็จแล้ว TargetEndpoint ที่ระบุโดย <RouteRule> นี้จะบอกให้ พร็อกซี API ส่งข้อความ ไปยัง http://maps.googleapis.com/maps/api/elevation/xml

หากคุณดาวน์โหลดพร็อกซี API ตัวอย่าง คุณจะพบ XML ของ TargetProxy ในไฟล์ 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

ตัวอย่างนี้ใช้นโยบาย JavaScript ที่ชื่อว่า GenerateResponse พร้อมไฟล์ทรัพยากร ที่มีโค้ด JavaScript เพื่อทำการแปลง ต่อไปนี้คือ คำจำกัดความของนโยบาย GenerateResponse

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

ไฟล์ทรัพยากร GenerateResponse.js มี JavaScript ที่ใช้ในการแปลง คุณดูโค้ดนั้นได้ใน ไฟล์ doc-samples/policy-mashup-cookbook/apiproxy/resources/JSC/GenerateResponse.js

นอกจากนี้ Apigee ยังมีนโยบาย XMLToJSON ที่พร้อมใช้งานเพื่อแปลง XML เป็น JSON คุณสามารถ แก้ไข ProxyEndpoint เพื่อใช้นโยบาย xmltojson ที่แสดงด้านล่าง แทนได้

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

การทดสอบตัวอย่าง

หากยังไม่ได้ดำเนินการ ให้ลองดาวน์โหลด ติดตั้งใช้งาน และเรียกใช้ตัวอย่าง policy-mashup-cookbook ซึ่งคุณจะพบได้ใน โฟลเดอร์ doc-samples ในที่เก็บตัวอย่าง Apigee Edge ใน GitHub เพียง ทำตามวิธีการในไฟล์ README ในโฟลเดอร์ policy-mashup-cookbook หรือ ทำตามวิธีการแบบย่อที่นี่: การใช้ พร็อกซี API ตัวอย่าง

สรุปได้ว่าคุณสามารถเรียก API ที่ประกอบกันได้ดังนี้ แทนที่ {myorg} ด้วย ชื่อองค์กร

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

การตอบกลับจะมีตำแหน่งที่เข้ารหัสที่อยู่เป็นพิกัดภูมิศาสตร์สำหรับกึ่งกลางของรหัสไปรษณีย์ที่ผู้ใช้แอปปลายทางระบุ รวมกับระดับความสูงของตำแหน่งที่เข้ารหัสที่อยู่เป็นพิกัดภูมิศาสตร์นั้น ระบบดึงข้อมูลจาก API แบ็กเอนด์ 2 รายการ Mashup ข้อมูลด้วยนโยบายที่แนบกับพร็อกซี API และแสดงผลข้อมูลไปยังไคลเอ็นต์ในการตอบกลับเดียว

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

สรุป

หัวข้อ Cookbook นี้อธิบายวิธีใช้รูปแบบการประกอบนโยบายเพื่อสร้าง Mashup ของข้อมูลจากแหล่งที่มาแบ็กเอนด์หลายแหล่ง การประกอบนโยบายเป็นรูปแบบทั่วไปที่ใช้ในการพัฒนาพร็อกซี API เพื่อเพิ่มฟังก์ชันการทำงานที่สร้างสรรค์ลงใน API