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

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

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

ดูภาพรวมทั่วไปขององค์ประกอบของนโยบายได้ที่ "รูปแบบองค์ประกอบของนโยบาย" ในรูปแบบตำราอาหารพร็อกซี API

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

เกี่ยวกับตัวอย่างตำราอาหารนี้

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

ตัวอย่างที่กล่าวถึงในที่นี้ใช้องค์ประกอบของนโยบายเพื่อรวมข้อมูลจาก 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"
      }
   }
}

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

หากต้องการอ่านภาพรวมคร่าวๆ เกี่ยวกับรูปแบบองค์ประกอบของนโยบาย โปรดดู "รูปแบบองค์ประกอบของนโยบาย" ในรูปแบบตำราอาหารพร็อกซีของ API

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

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

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

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

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

นโยบาย AssignMessage รายการแรกด้านล่างนี้จะสร้างข้อความคำขอที่จะส่งไปที่บริการการระบุพิกัดทางภูมิศาสตร์ของ Google

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

คำอธิบายสั้นๆ ขององค์ประกอบในนโยบายนี้มีดังนี้ อ่านข้อมูลเพิ่มเติมเกี่ยวกับนโยบายนี้ได้ในมอบหมายนโยบายข้อความ

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

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

ขั้นตอนถัดไปในลำดับองค์ประกอบของนโยบายคือการสร้างนโยบาย ServiceCallout นโยบาย ServiceAPI ที่ระบุด้านล่างจะส่งออบเจ็กต์คำขอที่เราสร้างในนโยบาย AssignMessage ก่อนหน้าไปยังบริการ Google Geocoding และบันทึกผลลัพธ์ในตัวแปรที่เรียกว่า 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>

คำอธิบายสั้นๆ เกี่ยวกับองค์ประกอบของนโยบายนี้

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

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

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

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

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

  • <ExtractVariable name> - ชื่อนโยบายจะใช้เพื่ออ้างอิงถึงนโยบายดังกล่าวเมื่อใช้ในขั้นตอน
  • <Source> - ระบุตัวแปรการตอบกลับที่เราสร้างในนโยบาย Serviceสามารถแสดงโฆษณา นี่คือตัวแปรที่นโยบายนี้ดึงข้อมูล
  • <VariablePrefix> - คํานําหน้าตัวแปรจะระบุเนมสเปซสําหรับตัวแปรอื่นๆ ที่สร้างขึ้นในนโยบายนี้ คำนำหน้าอาจเป็นชื่อใดก็ได้ ยกเว้นชื่อที่สงวนไว้ซึ่งกำหนดโดยตัวแปรที่กำหนดไว้ล่วงหน้าของ Edge
  • <JSONPayload> - องค์ประกอบนี้จะดึงข้อมูลการตอบกลับที่เราสนใจและใส่ไว้ในตัวแปรที่มีชื่อ ในความเป็นจริง Geocoding API แสดงข้อมูลมากกว่าละติจูดและลองจิจูด อย่างไรก็ตาม ค่าเหล่านี้เป็นเพียงค่าเดียวที่เราต้องการสำหรับตัวอย่างนี้ คุณดูการแสดงผลทั้งหมดของ JSON ที่แสดงผลโดย Geocoding API ได้ในเอกสารประกอบของ API ค่าของ geometry.location.lat และ geometry.location.lng จะเป็น 2 ฟิลด์จากที่มีอยู่หลายรายการในออบเจ็กต์ JSON ที่แสดงผล

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

  • geocoderesponse.latitude
  • geocoderesponse.longitude

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

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

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

หยุดชั่วคราว: กลับไปที่ขั้นตอน

ในตอนนี้ คุณอาจสงสัยว่าเหตุใดเราไม่สร้างนโยบาย ServiceAPI อื่น เพราะในที่สุดแล้ว เราก็ได้สร้างข้อความขึ้นมาอีกฉบับแล้ว ข้อความดังกล่าวจะส่งไปยังเป้าหมาย ซึ่งก็คือ Google Elevation API ได้อย่างไร คำตอบจะอยู่ในองค์ประกอบ <RouteRule> ของโฟลว์ <RouteRule> จะระบุการดำเนินการกับข้อความคำขอที่เหลืออยู่หลังจากดำเนินการส่วน <Request> ของโฟลว์แล้ว TargetEndpoint ที่ระบุโดย <RouteRule> นี้จะบอกให้พร็อกซี 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 สำหรับ "เครดิตเพิ่มเติม" โปรดเพิ่มนโยบายอีก 1 รายการลงในองค์ประกอบเพื่อเปลี่ยนการตอบกลับจาก 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-sample ในที่เก็บตัวอย่าง 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 รายการซึ่งผสมกับนโยบายที่แนบอยู่กับพร็อกซี API และส่งกลับไปยังไคลเอ็นต์ในการตอบกลับเดียว

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

สรุป

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