पॉलिसी कंपोज़िशन का इस्तेमाल करना

Apigee Edge के दस्तावेज़ देखे जा रहे हैं.
पर जाएं Apigee X दस्तावेज़.
info

इस विषय में, नीति कंपोज़िशन का इस्तेमाल करके, मैशअप बनाने का तरीका बताया गया है. नीति कंपोज़िशन, Apigee प्रॉक्सी का एक पैटर्न है. इसकी मदद से, नीतियों का इस्तेमाल करके, एक से ज़्यादा बैकएंड टारगेट से मिले नतीजों को एक ही रिस्पॉन्स में जोड़ा जा सकता है.

नीति कंपोज़िशन की सामान्य जानकारी के लिए, एपीआई प्रॉक्सी कुकबुक के पैटर्न में "नीति कंपोज़िशन पैटर्न" देखें.

सैंपल कोड डाउनलोड करें और उसे आज़माएं

कुकबुक के इस उदाहरण के बारे में जानकारी

कुकबुक के इस उदाहरण में, नीति कंपोज़िशन नाम के एपीआई प्रॉक्सी पैटर्न के बारे में बताया गया है. यह पैटर्न, एक से ज़्यादा बैकएंड सोर्स से डेटा को मैशअप करने का एक तरीका है. इसके अलावा, अन्य तरीके भी मौजूद हैं. आम तौर पर, इस विषय में यह बताया गया है कि मनचाहा नतीजा पाने के लिए, नीतियों को कैसे जोड़ा और एक साथ इस्तेमाल किया जा सकता है इस पैटर्न और इससे जुड़े अन्य पैटर्न की सामान्य जानकारी के लिए, एपीआई प्रॉक्सी कुकबुक पैटर्न देखें.

यहां दिए गए उदाहरण में, नीति कंपोज़िशन का इस्तेमाल करके, इन दो अलग-अलग सार्वजनिक एपीआई से डेटा को मैशअप किया गया है:

  • Google Geocoding API: यह एपीआई, पतों (जैसे, "1600 Amphitheatre Parkway, Mountain View, CA") को भौगोलिक निर्देशांकों (जैसे, अक्षांश 37.423021 और देशांतर -122.083739) में बदलता है.
  • Google Elevation API: यह एपीआई, धरती पर किसी जगह की ऊंचाई का डेटा पाने की क्वेरी के लिए, एक आसान इंटरफ़ेस उपलब्ध कराता है. इस उदाहरण में, Geocoding API से मिले निर्देशांकों का इस्तेमाल, इस एपीआई में इनपुट के तौर पर किया जाएगा.

ऐप्लिकेशन डेवलपर, इस एपीआई प्रॉक्सी को दो क्वेरी पैरामीटर, पिन कोड और देश के आईडी के साथ कॉल करेंगे:

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

शुरू करने से पहले

अगर आपको नीति कंपोज़िशन पैटर्न की खास जानकारी पढ़नी है, तो एपीआई प्रॉक्सी कुकबुक के पैटर्न में "नीति कंपोज़िशन पैटर्न" देखें.

कुकबुक के इस उदाहरण को समझने से पहले, आपको इन बुनियादी कॉन्सेप्ट के बारे में भी जानकारी होनी चाहिए:

  • नीतियां क्या होती हैं और उन्हें प्रॉक्सी से कैसे जोड़ा जाता है. नीतियों के बारे में जानने के लिए, नीति क्या होती है? लेख पढ़ें..
  • एपीआई प्रॉक्सी फ़्लो का स्ट्रक्चर, जैसा कि फ़्लो कॉन्फ़िगर करना लेख में बताया गया है. फ़्लो की मदद से, यह तय किया जा सकता है कि एपीआई प्रॉक्सी, नीतियों को किस क्रम में लागू करेगा. इस उदाहरण में, कई नीतियां बनाई गई हैं और उन्हें एपीआई प्रॉक्सी के फ़्लो में जोड़ा गया है.
  • आपके फ़ाइल सिस्टम पर, एपीआई प्रॉक्सी प्रोजेक्ट को कैसे व्यवस्थित किया जाता है. इसकी जानकारी, एपीआई प्रॉक्सी कॉन्फ़िगरेशन रेफ़रंस में दी गई है. कुकबुक के इस विषय में, क्लाउड-आधारित डेवलपमेंट के बजाय, लोकल डेवलपमेंट (फ़ाइल सिस्टम पर आधारित) के बारे में बताया गया है. क्लाउड-आधारित डेवलपमेंट में, एपीआई प्रॉक्सी को डेवलप करने के लिए, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल किया जा सकता है.
  • एपीआई पासकोड की पुष्टि करने की सुविधा का इस्तेमाल. यह ऐप्लिकेशन-आधारित सुरक्षा का सबसे आसान तरीका है. इसे किसी एपीआई के लिए कॉन्फ़िगर किया जा सकता है. ज़्यादा जानकारी के लिए, एपीआई पासकोड लेख पढ़ें. एपीआई पासकोड की ज़रूरत के हिसाब से, एपीआई को सुरक्षित एपीआई बनाना ट्यूटोरियल भी देखा जा सकता है.
  • एक्सएमएल की जानकारी होना. इस उदाहरण में, हम एपीआई प्रॉक्सी और उसकी नीतियां, फ़ाइल सिस्टम पर मौजूद एक्सएमएल फ़ाइलों की मदद से बनाते हैं.

अगर आपने सैंपल कोड डाउनलोड किया है, तो आपको इस विषय में बताई गई सभी फ़ाइलें, mashup-policy-cookbook सैंपल फ़ोल्डर में मिलेंगी. इन सेक्शन में, सैंपल कोड के बारे में विस्तार से बताया गया है.

फ़्लो के साथ चलना

नीतियों पर जाने से पहले, आइए हमारे उदाहरण एपीआई प्रॉक्सी के मुख्य फ़्लो पर एक नज़र डालें. नीचे दिखाया गया फ़्लो एक्सएमएल, हमें इस प्रॉक्सी, इसमें इस्तेमाल की गई नीतियों काफ़ी जानकारी देता है.

सैंपल डाउनलोड में, आपको यह एक्सएमएल, फ़ाइल में मिलेगा 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> - इस एलिमेंट में, इस एपीआई प्रॉक्सी से कनेक्ट करने के तरीके के बारे में जानकारी दी जाती है. इसमें <BasePath> भी शामिल है. इससे यह तय होता है कि इस एपीआई को कैसे कॉल किया जाएगा.
  • <RouteRule> - इस एलिमेंट में यह तय किया जाता है कि इनबाउंड अनुरोध मैसेज प्रोसेस होने के तुरंत बाद क्या होगा. इस मामले में, TargetEndpoint को कॉल किया जाता है. हम इस विषय में आगे, इस अहम चरण के बारे में ज़्यादा जानकारी देंगे.

नीतियां बनाना

इन सेक्शन में, नीति कंपोज़िशन के इस उदाहरण में शामिल हर नीति के बारे में बताया गया है.

पहला AssignMessage नीति बनाना

नीचे दी गई पहली AssignMessage नीति, एक अनुरोध मैसेज बनाती है. इसे Google Geocoding सेवा को भेजा जाएगा.

आइए, नीति के कोड से शुरू करते हैं. इसके बाद, हम इसके एलिमेंट के बारे में ज़्यादा जानकारी देंगे. सैंपल डाउनलोड में, आपको यह एक्सएमएल, 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> - क्वेरी पैरामीटर सेट करता है. इनकी ज़रूरत, बैकएंड एपीआई कॉल के लिए होती है. इस मामले में, Geocoding API को जगह की जानकारी चाहिए. इसे डाक कोड और देश के आईडी से दिखाया जाता है. ऐप्लिकेशन का उपयोगकर्ता यह जानकारी देता है. हम यहां सिर्फ़ इसे एक्सट्रैक्ट करते हैं. एपीआई के लिए, sensor पैरामीटर ज़रूरी है. इसकी वैल्यू सही या गलत हो सकती है. हम यहां इसे सिर्फ़ गलत पर हार्डकोड करते हैं.
  • <Verb> - इस मामले में, हम एपीआई को एक सामान्य GET अनुरोध भेज रहे हैं.
  • <AssignVariable> - इन वैरिएबल में, वे वैल्यू सेव होती हैं जिन्हें हम एपीआई को पास कर रहे हैं. इस उदाहरण में, वैरिएबल को बाद में, क्लाइंट को भेजे गए रिस्पॉन्स में ऐक्सेस किया जाएगा.

ServiceCallout की मदद से अनुरोध भेजना

नीति कंपोज़िशन के क्रम में अगला चरण, ServiceCallout नीति बनाना है. नीचे दी गई ServiceCallout नीति, अनुरोध ऑब्जेक्ट को Google Geocoding सेवा को भेजती है. यह ऑब्जेक्ट, हमने पिछली AssignMessage नीति में बनाया था. साथ ही, नतीजे को GeocodingResponse नाम के वैरिएबल में सेव करती है.

पहले की तरह, आइए सबसे पहले कोड पर एक नज़र डालें. इसके बाद, इसकी पूरी जानकारी दी गई है. Service Callout नीति में, इस नीति के बारे में ज़्यादा जानकारी दी गई है. सैंपल डाउनलोड में, आपको यह एक्सएमएल, फ़ाइल में मिलेगा 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 नीति में बनाया गया था. इसमें, बैकएंड एपीआई को भेजा जाने वाला अनुरोध शामिल होता है.
  • <Response> - इस एलिमेंट में, उस वैरिएबल का नाम दिया जाता है जिसमें रिस्पॉन्स सेव होता है. जैसा कि आपको दिखेगा, इस वैरिएबल को बाद में, ExtractVariables नीति से ऐक्सेस किया जाएगा.
  • <HTTPTargetConnection> - बैकएंड एपीआई का टारगेट यूआरएल तय करता है. इस मामले में, हम यह तय करते हैं कि एपीआई, JSON रिस्पॉन्स दिखाए.

अब हमारे पास दो नीतियां हैं. पहली नीति में, बैकएंड एपीआई (Google का Geocoding API) का इस्तेमाल करने के लिए ज़रूरी अनुरोध की जानकारी दी गई है. वहीं, दूसरी नीति की मदद से, बैकएंड एपीआई को अनुरोध भेजा जाता है. इसके बाद, हम रिस्पॉन्स को मैनेज करेंगे.

ExtractVariables की मदद से रिस्पॉन्स को पार्स करना

ExtractVariables नीति, ServiceCallout नीति से मिले रिस्पॉन्स मैसेज से कॉन्टेंट को पार्स करने का एक आसान तरीका उपलब्ध कराती है. ExtractVariables का इस्तेमाल, JSON या एक्सएमएल को पार्स करने के लिए किया जा सकता है. इसके अलावा, इसका इस्तेमाल यूआरआई पाथ, एचटीटीपी हेडर, क्वेरी पैरामीटर, और फ़ॉर्म पैरामीटर से कॉन्टेंट को एक्सट्रैक्ट करने के लिए भी किया जा सकता है.

यहां ExtractVariables नीति की सूची दी गई है. Extract Variables नीति में, इस नीति के बारे में ज़्यादा जानकारी दी गई है. सैंपल डाउनलोड में, आपको यह एक्सएमएल, फ़ाइल में मिलेगा 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's पहले से तय वैरिएबल में तय किए गए रिज़र्व नाम नहीं होने चाहिए.
  • <JSONPayload> - यह एलिमेंट, रिस्पॉन्स डेटा को वापस पाता है. यह डेटा हमारे लिए काम का है. साथ ही, इसे नाम वाले वैरिएबल में डालता है. दरअसल, Geocoding API, अक्षांश और देशांतर के अलावा भी कई तरह की जानकारी दिखाता है. हालांकि, इस सैंपल के लिए हमें सिर्फ़ इन वैल्यू की ज़रूरत है. Geocoding API से मिले JSON को पूरी तरह से रेंडर किया गया वर्शन, एपीआई के दस्तावेज़ में देखा जा सकता है. geometry.location.lat और geometry.location.lng की वैल्यू, मिले JSON ऑब्जेक्ट में मौजूद कई फ़ील्ड में से सिर्फ़ दो हैं.

यह साफ़ तौर पर नहीं दिख सकता, लेकिन यह देखना ज़रूरी है कि ExtractVariables, दो वैरिएबल बनाता है. इनके नाम में वैरिएबल प्रीफ़िक्स (geocoderesponse) और नीति में तय किए गए असली वैरिएबल के नाम शामिल होते हैं. ये वैरिएबल, एपीआई प्रॉक्सी में सेव होते हैं और प्रॉक्सी फ़्लो में मौजूद अन्य नीतियों के लिए उपलब्ध होंगे. जैसा कि आपको दिखेगा. ये वैरिएबल हैं:

  • geocoderesponse.latitude
  • geocoderesponse.longitude

अब ज़्यादातर काम हो चुका है. हमने तीन नीतियों का एक कंपोज़िट बनाया है. यह कंपोज़िट, अनुरोध बनाता है , बैकएंड एपीआई को कॉल करता है, और मिले JSON डेटा को पार्स करता है. आखिरी चरणों में, हम फ़्लो के इस हिस्से से डेटा को दूसरी AssignMessage नीति में डालेंगे. इसके बाद, दूसरे बैकएंड एपीआई (Google Elevation API) को कॉल करेंगे. साथ ही, मैशअप किए गए डेटा को ऐप्लिकेशन डेवलपर को वापस भेजेंगे.

AssignMessage की मदद से दूसरा अनुरोध जनरेट करना

नीचे दी गई AssignMessage नीति, पहले बैकएंड (Google Geocoding) से मिले वैरिएबल का इस्तेमाल करती है. हमने इन वैरिएबल को सेव किया था. साथ ही, इन्हें दूसरे एपीआई (Google Elevation) के लिए भेजे जाने वाले अनुरोध में प्लग किया जाता है. जैसा कि पहले बताया गया है, ये वैरिएबल geocoderesponse.latitude और geocoderesponse.longitude हैं.

सैंपल डाउनलोड में, आपको यह एक्सएमएल, फ़ाइल में मिलेगा 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 है. यह ज़रूरी है और इसकी वैल्यू सही या गलत होनी चाहिए. इस समय ध्यान देने वाली सबसे अहम बात यह है कि यहां बनाए गए अनुरोध मैसेज के लिए, ServiceCallout की ज़रूरत नहीं होती. इस समय, हमें दूसरे एपीआई को ServiceCallout से कॉल करने की ज़रूरत नहीं है, क्योंकि हम प्रॉक्सी के TargetEndpoint से बैकएंड एपीआई को कॉल कर सकते हैं. अगर इस बारे में सोचा जाए, तो हमारे पास Google Elevations API को कॉल करने के लिए ज़रूरी सभी डेटा मौजूद है. इस चरण में जनरेट किए गए अनुरोध मैसेज के लिए, ServiceCallout की ज़रूरत नहीं होती. ऐसा इसलिए, क्योंकि मुख्य अनुरोध पाइपलाइन के लिए जनरेट किए गए अनुरोध को, इस एपीआई प्रॉक्सी के लिए कॉन्फ़िगर किए गए RouteRule के मुताबिक, ProxyEndpoint से TargetEndpoint को फ़ॉरवर्ड किया जाएगा. TargetEndpoint, रिमोट एपीआई के साथ कनेक्शन को मैनेज करता है. (याद रखें कि Elevation API का यूआरएल, TargetEndpoint के लिए HTTPConnection में तय किया गया है. ज़्यादा जानने के लिए, Elevation API का दस्तावेज़ देखें. हमने पहले जो QueryParams सेव किए थे, country और postalcode, उनकी अब ज़रूरत नहीं है. इसलिए, हम उन्हें यहां से हटा देते हैं हैं.

कुछ देर के लिए रुकें: फ़्लो पर वापस जाएं

इस समय, आपको लग सकता है कि हम दूसरी ServiceCallout नीति क्यों नहीं बना रहे हैं. आखिरकार, हमने एक और मैसेज बनाया है. वह मैसेज, टारगेट यानी Google Elevation API को कैसे भेजा जाता है? इसका जवाब, फ़्लो के <RouteRule> एलिमेंट में है. <RouteRule> में यह तय किया जाता है कि फ़्लो के <Request> हिस्से के लागू होने के बाद, बचे हुए अनुरोध मैसेज के साथ क्या करना है. इस <RouteRule> में तय किया गया TargetEndpoint, एपीआई प्रॉक्सी को मैसेज, http://maps.googleapis.com/maps/api/elevation/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 से मिले रिस्पॉन्स को प्रोसेस करना है. इसके बाद, हमारा काम पूरा हो जाएगा.

एक्सएमएल से JSON में रिस्पॉन्स बदलना

इस उदाहरण में, Google Elevation API से मिला रिस्पॉन्स, एक्सएमएल के तौर पर दिखाया जाता है. "ज़्यादा क्रेडिट" पाने के लिए, आइए अपने कंपोज़िट में एक और नीति जोड़ें, ताकि रिस्पॉन्स को एक्सएमएल से JSON में बदला जा सके.

इस उदाहरण में, GenerateResponse नाम की JavaScript नीति का इस्तेमाल किया गया है. इसमें, 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, एक्सएमएल को JSON में बदलने के लिए, XMLToJSON नाम की एक नीति भी उपलब्ध कराता है. ProxyEndpoint में बदलाव करके, नीचे दिखाई गई xmltojson नीति का इस्तेमाल किया जा सकता है.

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

उदाहरण की जांच करना

अगर आपने अब तक ऐसा नहीं किया है, तो policy-mashup-cookbook सैंपल को डाउनलोड, डिप्लॉय, और रन करने की कोशिश करें. यह आपको GitHub पर, Apigee Edge के सैंपल के रिपॉज़िटरी में, doc-samples folder में मिलेगा. इसके लिए, policy-mashup-cookbook फ़ोल्डर में मौजूद README फ़ाइल में दिए गए निर्देशों का पालन करें. इसके अलावा, यहां दिए गए संक्षिप्त निर्देशों का पालन करें: सैंपल एपीआई प्रॉक्सी का इस्तेमाल करना.

खास जानकारी के तौर पर, कंपोज़िट एपीआई को इस तरह कॉल किया जा सकता है. {myorg} को अपने संगठन के नाम से बदलें:

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

रिस्पॉन्स में, ऐप्लिकेशन के असली उपयोगकर्ता की ओर से दिए गए पिन कोड वाले इलाके के बीचोंबीच की जियोकोड की गई जगह के साथ-साथ, उस जियोकोड की गई जगह की ऊंचाई की जानकारी शामिल होती है. यह डेटा, दो बैकएंड एपीआई से वापस पाया गया था. इसे एपीआई प्रॉक्सी से जुड़ी नीतियों की मदद से मैशअप किया गया था. साथ ही, क्लाइंट को एक ही रिस्पॉन्स में वापस भेजा गया था.

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

खास जानकारी

कुकबुक के इस विषय में, नीति कंपोज़िशन पैटर्न का इस्तेमाल करके, एक से ज़्यादा बैकएंड सोर्स से डेटा को मैशअप करने का तरीका बताया गया है. नीति कंपोज़िशन, एपीआई प्रॉक्सी डेवलपमेंट में इस्तेमाल किया जाने वाला एक सामान्य पैटर्न है. इसका इस्तेमाल, अपने एपीआई में क्रिएटिव फ़ंक्शनैलिटी जोड़ने के लिए किया जाता है.