JavaScript के साथ प्रोग्रामिंग एपीआई प्रॉक्सी

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

इस विषय में आपको, किसी रिस्पॉन्स मैसेज में डाइनैमिक तौर पर एचटीटीपी हेडर जोड़ने के लिए, JavaScript का इस्तेमाल करने का तरीका पता चलेगा. साथ ही, JSON रिस्पॉन्स को पार्स करने और अनुरोध करने वाले ऐप्लिकेशन पर अपनी प्रॉपर्टी के सबसेट को लौटाने का तरीका बताया जाएगा.

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

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

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

एपीआई प्रॉक्सी में दो JavaScript सैंपल हैं:

  • setHeaders.js: इस JavaScript को कुछ वैरिएबल की वैल्यू मिलती हैं, जो एपीआई प्रॉक्सी को शुरू करने पर सेट होती हैं. JavaScript, उन वैरिएबल को रिस्पॉन्स मैसेज में जोड़ देता है, ताकि आप अपने हर अनुरोध के लिए उनकी वैल्यू देख सकें.
  • minimize.js: इस JavaScript से पता चलता है कि मैसेज के कॉन्टेंट की मदद से कैसे काम किया जा सकता है. इस सैंपल के पीछे मकसद यह है कि एक सेवा अक्सर ज़रूरत से ज़्यादा डेटा दिखाती है. इसलिए, JavaScript, रिस्पॉन्स मैसेज को पार्स करता है, कुछ दिलचस्प प्रॉपर्टी एक्सट्रैक्ट करता है, और फिर उनका इस्तेमाल रिस्पॉन्स मैसेज का कॉन्टेंट बनाने के लिए करता है.

setHeader.js के लिए कोड:

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));
context.setVariable("response.header.X-Apigee-ApiProxyName", context.getVariable("apiproxy.name"));
context.setVariable("response.header.X-Apigee-ProxyName", context.getVariable("proxy.name"));
context.setVariable("response.header.X-Apigee-ProxyBasePath", context.getVariable("proxy.basepath"));
context.setVariable("response.header.X-Apigee-ProxyPathSuffix", context.getVariable("proxy.pathsuffix"));
context.setVariable("response.header.X-Apigee-ProxyUrl", context.getVariable("proxy.url"));

minimize.js के लिए कोड:

// Parse the respose from the target.
var res = JSON.parse(context.proxyResponse.content);

// Pull out only the information we want to see in the response.
var minimizedResponse = { city: res.root.city,
                          state: res.root.state };
          
// Set the response variable. 
context.proxyResponse.content = JSON.stringify(minimizedResponse);

JavaScript में फ़्लो वैरिएबल को कॉन्टेक्स्ट ऑब्जेक्ट के ज़रिए ऐक्सेस किया जा सकता है. यह ऑब्जेक्ट, Edge JavaScript के ऑब्जेक्ट मॉडल का हिस्सा है. ऑब्जेक्ट मॉडल के बारे में जानकारी के लिए, JavaScript ऑब्जेक्ट मॉडल देखें.

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

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

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

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

प्रॉक्सी फ़्लो को समझना

एपीआई प्रॉक्सी में JavaScript चलाने के लिए, आपको उसे 'चरण' नाम के नीति अटैचमेंट का इस्तेमाल करके, फ़्लो से अटैच करना होगा. JavaScript टाइप की नीति (नोट के कैपिटल लेटर) में सिर्फ़ JavaScript फ़ाइल के नाम का रेफ़रंस होता है. आपके पास ResourceURL एलिमेंट का इस्तेमाल करके, नीति को JavaScript फ़ाइल की ओर ले जाने का विकल्प होता है.

उदाहरण के लिए, इस नीति में setHeader.js नाम की JavaScript फ़ाइल का रेफ़रंस दिया गया है.

<Javascript name='setHeaders' timeLimit='200'>
    <ResourceURL>setHeaders.js</ResourceURL>
</Javascript>

इस नीति को किसी भी दूसरे टाइप की नीति की तरह ही, एपीआई प्रॉक्सी फ़्लो में अटैच किया जा सकता है. नीति को एपीआई प्रॉक्सी फ़्लो से जोड़कर, आप यह बताते हैं कि JavaScript को कहां इस्तेमाल करना है. इसकी मदद से, JavaScript को एक्ज़ीक्यूट किया जा सकता है, जो अनुरोध के मैसेज या रिस्पॉन्स मैसेज के साथ, उन मैसेज के साथ इंटरैक्ट करता है. जैसे, वे मैसेज एपीआई प्रॉक्सी के ज़रिए 'फ़्लो' होते हैं. इस उदाहरण में, दोनों JavaScript रिस्पॉन्स फ़्लो में काम करती हैं, क्योंकि ये नीतियां दो काम करती हैं: रिस्पॉन्स मैसेज पर एचटीटीपी हेडर सेट करना और उस रिस्पॉन्स मैसेज को 'छोटा करना' जिस पर Apigee Edge, अनुरोध करने वाले ऐप्लिकेशन पर लौटता है.

अगर इस फ़्लो कॉन्फ़िगरेशन को मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) में खोला जाता है, तो आपको फ़्लो कॉन्फ़िगरेशन नीचे दिखेगा.

नेविगेटर पैनल में, प्रॉक्सी एंडपॉइंट > डिफ़ॉल्ट > PostFlow चुनें.

'डिफ़ॉल्ट' नाम के प्रॉक्सीEndpoint का एक्सएमएल कॉन्फ़िगरेशन नीचे दिखाया गया है.

<ProxyEndpoint name="default">
  <PostFlow>
    <Response>
      <!-- Steps reference policies under /apiproxy/policies -->
      <!-- First, set a few HTTP headers with variables for this transaction. -->
      <Step><Name>setHeaders</Name></Step>
      <!-- Next, transform the response from XML to JSON for easier parsing with JavaScript -->
      <Step><Name>transform</Name></Step>
      <!-- Finally, use JavaScript to create minimized response with just city and state. -->
      <Step><Name>minimize</Name></Step>
    </Response>
  </PostFlow>
  <HTTPProxyConnection>
        <!-- BasePath defines the network address for this API proxy. See the script 'invoke.sh' to see how the complete URL for this API proxy is constructed.-->
    <BasePath>/javascript-cookbook</BasePath>
     <!-- Set VirtualHost to 'secure' to have this API proxy listen on HTTPS. -->
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

फ़्लो के एलिमेंट की खास जानकारी यहां दी गई है.

  • <Request> - <Request> एलिमेंट में कई <Step> एलिमेंट होते हैं. हर चरण में एक नीति तय की जाती है, जिसे आप इस विषय के बाकी हिस्सों में बनाते हैं. ये नीतियां, एपीआई प्रॉक्सी फ़्लो में JavaScript को जोड़ती हैं. साथ ही, नीति के अटैचमेंट की जगह से यह तय होता है कि JavaScript कब काम करता है.
  • <Response> - <Response> एलिमेंट में <Steps> भी शामिल होते हैं. इन चरणों की मदद से, वे नीतियां भी लागू होती हैं जो टारगेट के आखिरी जवाब को प्रोसेस करने के लिए ज़िम्मेदार होती हैं (इस उदाहरण में, Apigee की मॉक सेवा टारगेट है. ध्यान दें कि /apiproxy/targets/default.xml में HTTPTargetConnection सेटिंग को ध्यान में रखें.)
  • <HTTPProxyConnection> - होस्ट और यूआरआई पाथ के बारे में बताता है, जो वह नेटवर्क पता तय करता है जिसे ऐप्लिकेशन इस एपीआई का इस्तेमाल करने के लिए कॉल करते हैं.
  • <RouteRule> - यह एलिमेंट बताता है कि ProxyEndpoint के ज़रिए कितने TargetEndpoint कॉन्फ़िगरेशन को शुरू किया गया है.

प्रॉक्सी में JavaScript कोड जोड़ना

JavaScript (जैसे कि Python स्क्रिप्ट, Java JAR फ़ाइलें, XSLT फ़ाइलें वगैरह) रिसॉर्स के तौर पर स्टोर की जाती हैं. जब आप JavaScript पर काम करना शुरू करें, तब अपनी JavaScript फ़ाइलों को एपीआई प्रॉक्सी में स्टोर करना सबसे आसान हो जाता है. आगे बढ़ने पर, JavaScript को सामान्य और फिर से इस्तेमाल करने लायक बनाना चाहिए. इसके बाद, उसे एनवायरमेंट या संगठन के लेवल पर सेव किया जाना चाहिए. यह आपको एक ही JavaScript फ़ाइल को एक से ज़्यादा एपीआई प्रॉक्सी में सेव करने से रोकता है. इन्हें तुरंत मैनेज करना मुश्किल हो सकता है.

संगठन और एनवायरमेंट के लेवल पर संसाधनों को सेव करने के बारे में जानने के लिए, संसाधन फ़ाइलें लेख पढ़ें.

इसे आज़माएं

प्रॉक्सी को डिप्लॉय करने और कॉल करने से जुड़े निर्देशों के लिए, JavaScript कुकबुक README देखें.

एपीआई प्रॉक्सी को इंपोर्ट और डिप्लॉय करना

बदलाव करने के बाद, मैनेज करने के यूज़र इंटरफ़ेस (यूआई) के एपीआई प्रॉक्सी बिल्डर टूल में, एपीआई प्रॉक्सी सेव की जा सकती है.

इसके अलावा, /api-platform-samples/doc-samples/javascript-cookbook डायरेक्ट्री में यह निर्देश दिया जा सकता है.

$ sh deploy.sh

JavaScript की जांच करना

/api-platform-samples/doc-samples/javascript-cookbook डायरेक्ट्री में ये निर्देश चलाएं.

$ sh invoke.sh

कर्ल फ़्लैग -v का इस्तेमाल शेल स्क्रिप्ट में किया जाता है, ताकि उस रिस्पॉन्स मैसेज पर एचटीटीपी हेडर देखे जा सकें जिसमें JavaScript ने बदलाव किया है.

ऐसे में सीधे तौर पर अनुरोध सबमिट किया जा सकता है:

$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook 

अगर JavaScript ठीक से काम करता है, तो आपको कुछ ऐसा जवाब दिखेगा:

< X-Apigee-Demo-Target: default
< X-Apigee-Demo-ApiProxyName: simple-javascript
< X-Apigee-Demo-ProxyName: default
< X-Apigee-Demo-ProxyBasePath: /javascript-cookbook
< X-Apigee-Demo-ProxyPathSuffix: /xml
< X-Apigee-Demo-ProxyUrl: http://rrt331ea.us-ea.4.apigee.com/javascript-cookbook/xml
 
{"city":"San Jose","state":"CA"}

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

स्क्रिप्ट से जुड़ी गड़बड़ियां

JavaScript लिखते समय आपको गड़बड़ियां दिखेंगी. एपीआई प्रॉक्सी से जारी की गई JavaScript की गड़बड़ियों का फ़ॉर्मैट नीचे दिखाया गया है.

{  
   "fault":{  
      "faultstring":"Execution of rewriteTargetUrl failed with error: Javascript runtime error: \"TypeError: Cannot find function getVariable in object TARGET_REQ_FLOW. (rewriteTargetUrl_js#1). at line 1 \"",
      "detail":{  
         "errorcode":"steps.javascript.ScriptExecutionFailed"
      }
   }
}

JavaScript का इस्तेमाल कब करना चाहिए

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

अगर आपकी पसंद के मुताबिक काम करने की सुविधा को लेकर समस्या है, तो जहां हो सके वहां Java का इस्तेमाल करें.

खास जानकारी

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