फ़िलहाल, Apigee Edge के दस्तावेज़ देखे जा रहे हैं.
पर जाएं
Apigee X दस्तावेज़. info
इस विषय में, आपको JavaScript का इस्तेमाल करके, रिस्पॉन्स मैसेज में डाइनैमिक तरीके से एचटीटीपी हेडर जोड़ने का तरीका बताया जाएगा. साथ ही, JSON रिस्पॉन्स को पार्स करने और अनुरोध करने वाले ऐप्लिकेशन को उसकी प्रॉपर्टी का सबसेट दिखाने का तरीका भी बताया जाएगा.
सैंपल कोड डाउनलोड करना और उसे आज़माना
इस कुकबुक के उदाहरण के बारे में जानकारी
कुकबुक के इस उदाहरण में, एपीआई प्रॉक्सी पैटर्न के बारे में बताया गया है. इसमें, API के व्यवहार को 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 फ़ाइल पर पॉइंट किया जाता है.
उदाहरण के लिए, यहां दी गई नीति, JavaScript फ़ाइल को रेफ़र करती है जिसे
setHeader.js कहा जाता है.
<Javascript name='setHeaders' timeLimit='200'> <ResourceURL>setHeaders.js</ResourceURL> </Javascript>
इस नीति को, एपीआई प्रॉक्सी फ़्लो से उसी तरह जोड़ा जा सकता है जैसे किसी अन्य नीति के टाइप को जोड़ा जाता है. नीति को एपीआई प्रॉक्सी फ़्लो से जोड़कर, यह बताया जाता है कि JavaScript को कहां लागू किया जाना चाहिए. इससे, एपीआई प्रॉक्सी के ज़रिए 'फ़्लो' होने वाले अनुरोध मैसेज या रिस्पॉन्स मैसेज के साथ इंटरैक्ट करने वाले JavaScript को लागू किया जा सकता है. इस उदाहरण में, दोनों JavaScript, रिस्पॉन्स फ़्लो में लागू होती हैं. ऐसा इसलिए, क्योंकि नीतियां दो काम करती हैं: रिस्पॉन्स मैसेज पर एचटीटीपी हेडर सेट करना और 'कम करना' रिस्पॉन्स मैसेज जो Apigee Edge अनुरोध करने वाले ऐप्लिकेशन को देता है.
अगर मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) में इस फ़्लो कॉन्फ़िगरेशन को खोला जाता है, तो आपको नीचे दिया गया फ़्लो कॉन्फ़िगरेशन दिखेगा.
**नेविगेटर** पैनल में, **प्रॉक्सी एंडपॉइंट > डिफ़ॉल्ट > PostFlow** को चुनें.

'डिफ़ॉल्ट' नाम के ProxyEndpoint के लिए, यहां उससे जुड़ा एक्सएमएल कॉन्फ़िगरेशन दिखाया गया है.
<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 को पार्स करने और कस्टम रिस्पॉन्स मैसेज बनाने का तरीका भी पता चलता है.