आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
इस पेज पर जाएं
Apigee X दस्तावेज़. जानकारी
इस विषय में, Apigee Edge JavaScript ऑब्जेक्ट मॉडल के बारे में बताया गया है. यह ज़रूरी है कि अगर आपको एपीआई में कस्टम JavaScript जोड़ने के लिए, JavaScript नीति का इस्तेमाल करना है, तो यह मॉडल प्रॉक्सी.
Edge JavaScript के ऑब्जेक्ट मॉडल के बारे में जानकारी
Apigee Edge का JavaScript ऑब्जेक्ट मॉडल, उससे जुड़ी प्रॉपर्टी वाले ऑब्जेक्ट के बारे में बताता है यह, Apigee Edge के प्रॉक्सी फ़्लो में लागू होने वाले JavaScript कोड के लिए उपलब्ध होता है. JavaScript का इस्तेमाल किया जाता है नीति का पालन करना होगा.
इस मॉडल के ज़रिए तय किए गए ऑब्जेक्ट में एपीआई प्रॉक्सी फ़्लो के अंदर दायरा होता है, जिसका मतलब है कि कुछ ऑब्जेक्ट और प्रॉपर्टी फ़्लो में सिर्फ़ खास पॉइंट पर ही उपलब्ध हों. जब आपके JavaScript चलाया जाता है और इसे लागू करने के लिए एक स्कोप बनाया जाता है. इस दायरे में, ये ऑब्जेक्ट के रेफ़रंस बनाए गए हैं:
- कॉन्टेक्स्ट: एक ऑब्जेक्ट जो मैसेज के कॉन्टेक्स्ट का ऐक्सेस देता है
- अनुरोध: एक शॉर्टहैंड, जो अनुरोध किए गए ऑब्जेक्ट को ऐक्सेस करने की अनुमति देता है
- response: एक शॉर्टहैंड, जो अनुरोध किए गए ऑब्जेक्ट को ऐक्सेस करने की अनुमति देता है
- क्रिप्टो: कई हैश फ़ंक्शन देता है
- print: आउटपुट देने के लिए इस्तेमाल किया जाने वाला फ़ंक्शन
- प्रॉपर्टी: इससे नीति में मौजूद कॉन्फ़िगरेशन प्रॉपर्टी को पढ़ने का ऐक्सेस मिलता है
कॉन्टेक्स्ट ऑब्जेक्ट
context
ऑब्जेक्ट का स्कोप ग्लोबल है. यह API में हर जगह उपलब्ध है
प्रॉक्सी फ़्लो. इसमें चार चाइल्ड ऑब्जेक्ट हैं: proxyRequest
, proxyResponse
,
targetRequest
, targetResponse
. इन चाइल्ड ऑब्जेक्ट का दायरा
ऐंबियंट रिक्वेस्ट और रिस्पॉन्स, या तो प्रॉक्सी अनुरोध और रिस्पॉन्स या टारगेट अनुरोध और
जवाब. उदाहरण के लिए, अगर JavaScript नीति फ़्लो के प्रॉक्सी एंडपॉइंट वाले हिस्से में लागू होती है, तो
इसके बाद, context.proxyRequest
और context.proxyResponse
ऑब्जेक्ट,
दायरा. अगर JavaScript टारगेट फ़्लो में चलता है, तो context.targetRequest
और
context.targetResponse
ऑब्जेक्ट, स्कोप में हैं.
context
ऑब्जेक्ट में ऐसी प्रॉपर्टी और मेथड भी हैं जिनके बारे में पूरी जानकारी दी गई है
इस विषय के बारे में ज़्यादा जानकारी मिलेगी. उदाहरण के लिए, नीचे दिए गए JavaScript कोड के उदाहरण में
context.flow
प्रॉपर्टी बनाई गई है और get/setVariable()
तरीकों को चालू किया गया है
context
.
if (context.flow=="PROXY_REQ_FLOW") { var username = context.getVariable("request.formparam.user"); context.setVariable("USER.name", username); }
ये तरीके सीधे फ़्लो वैरिएबल के साथ इंटरैक्ट करते हैं.
context.flow
प्रॉपर्टी की वैल्यू, मौजूदा फ़्लो का स्कोप है. प्रॉक्सी में
अनुरोध फ़्लो के लिए, यह कॉन्स्टेंट PROXY_REQ_FLOW
पर सेट है. अगर टारगेट कीमत में
रिस्पॉन्स फ़्लो के लिए, यह TARGET_RESP_FLOW
पर सेट है. यह कॉन्स्टेंट इनके लिए काम करता है
इलाके के हिसाब से कोड को एक्ज़ीक्यूट किया जा रहा है. गैटर आपको फ़्लो वैरिएबल और सेटर सेट करने देता है
फ़्लो वैरिएबल के बारे में ज़्यादा जानें. ये वैरिएबल आम तौर पर प्रॉक्सी फ़्लो में उपलब्ध होते हैं और इनका इस्तेमाल किया जा सकता है
अन्य नीतियों का पालन करें.
ज़्यादा जानकारी के लिए, नीचे कॉन्टेक्स्ट ऑब्जेक्ट का रेफ़रंस देखें और उदाहरण.
क्रिप्टो ऑब्जेक्ट
क्रिप्टो ऑब्जेक्ट, JavaScript ऑब्जेक्ट में बेसिक और अच्छी परफ़ॉर्मेंस वाली क्रिप्टोग्राफ़िक सहायता जोड़ता है मॉडल. ज़्यादा जानकारी और उदाहरणों के लिए, यहां क्रिप्टो ऑब्जेक्ट का रेफ़रंस देखें.
अनुरोध और उसका जवाब चीज़ें
request
और response
ऑब्जेक्ट,
ऐंबियंट रिक्वेस्ट और रिस्पॉन्स, या तो प्रॉक्सी अनुरोध और रिस्पॉन्स या टारगेट अनुरोध और
जवाब. इन वैरिएबल से रेफ़र किए जाने वाले ऑब्जेक्ट, उस कॉन्टेक्स्ट पर निर्भर करते हैं जिसमें JavaScript
नीति लागू होती है. अगर JavaScript, प्रॉक्सी एंडपॉइंट के फ़्लो में चलता है, तो अनुरोध और
रिस्पॉन्स वैरिएबल context.proxyRequest
और
context.proxyResponse
. अगर JavaScript टारगेट फ़्लो में चलता है, तो वैरिएबल
context.targetRequest
और context.targetResponse
देखें.
Print() फ़ंक्शन
JavaScript ऑब्जेक्ट मॉडल में print()
फ़ंक्शन शामिल है. इसका इस्तेमाल डीबग करने के लिए किया जा सकता है
जानकारी को एज ट्रेस टूल को भेजना है. JavaScript प्रिंट() की मदद से डीबग करने का तरीका देखें
स्टेटमेंट.
प्रॉपर्टी ऑब्जेक्ट
नीति के कॉन्फ़िगरेशन में properties
वैरिएबल.
उदाहरण के लिए, अगर आपके JavaScript कॉन्फ़िगरेशन में ये चीज़ें शामिल हैं:
<Javascript name='JS-1' > <Properties> <Property name="number">8675309</Property> <Property name="firstname">Jenny</Property> </Properties> <ResourceURL>jsc://my-code.js</ResourceURL> </Javascript>
इसके बाद, my-code.js
में ये काम किए जा सकते हैं:
print(properties.firstname); // prints Jenny print(properties.number); // 8675309
व्यावहारिक तौर पर, कॉन्फ़िगरेशन की मदद से कोड अलग तरीके से काम कर सकता है जब अलग-अलग माहौल में, अलग-अलग समय पर या किसी और की वजह.
उदाहरण के लिए, नीचे "वैरिएबल का नाम" तय है और इसकी स्टाइल यह आउटपुट देती है कि JavaScript को इनमें से जानकारी देनी चाहिए:
<Javascript name='JS-2' > <Properties> <Property name="output">my_output_variable</Property> <Property name="prettyPrint">true</Property> </Properties> <ResourceURL>jsc://emit-results.js</ResourceURL> </Javascript>अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इसके बाद,
emit-results.js
में कोड यह काम कर सकता है:
var result = { prop1: "something", prop2 : "something else" } ; if (properties.prettyPrint == "true") { context.setVariable(properties.output, JSON.stringify(result, null, 2)); } else { context.setVariable(properties.output, JSON.stringify(result)); }
क्रिप्टो ऑब्जेक्ट का रेफ़रंस
क्रिप्टो ऑब्जेक्ट की मदद से, JavaScript में बुनियादी क्रिप्टोग्राफ़िक हैशिंग फ़ंक्शन पूरे किए जा सकते हैं.
क्रिप्टो ऑब्जेक्ट का स्कोप ग्लोबल है. यह एपीआई प्रॉक्सी फ़्लो में हर जगह उपलब्ध होता है. क्रिप्टो की मदद से, इन हैश ऑब्जेक्ट का इस्तेमाल किया जा सकता है:
- SHA-1
- SHA256
- SHA512
- MD5
SHA-1 ऑब्जेक्ट के साथ काम करना
SHA-1 ऑब्जेक्ट बनाए जा सकते हैं, उन्हें अपडेट किया जा सकता है, और उन्हें हेक्स और base64 वैल्यू में बदला जा सकता है.
नया SHA-1 ऑब्जेक्ट बनाना
var _sha1 = crypto.getSHA1();
SHA-1 ऑब्जेक्ट को अपडेट करना
सिंटैक्स
_sha1.update(value);
पैरामीटर
- value - (स्ट्रिंग) स्ट्रिंग की कोई भी वैल्यू.
उदाहरण
SHA-1 ऑब्जेक्ट को अपडेट करें:
_sha1.update("salt_value"); _sha1.update("some text");
SHA-1 ऑब्जेक्ट को हेक्स स्ट्रिंग के तौर पर रिटर्न करना
var _hashed_token = _sha1.digest();
SHA-1 ऑब्जेक्ट को base64 स्ट्रिंग के तौर पर दिखाएं
var _hashed_token = _sha1.digest64();
SHA-256 ऑब्जेक्ट के साथ काम करना
SHA-256 ऑब्जेक्ट बनाए जा सकते हैं, उन्हें अपडेट किया जा सकता है, और उन्हें हेक्स और base64 वैल्यू में बदला जा सकता है.
नया SHA-256 ऑब्जेक्ट बनाना
var _sha256 = crypto.getSHA256();
SHA-256 ऑब्जेक्ट को अपडेट करना
सिंटैक्स
_sha256.update(value);
पैरामीटर
- value - (स्ट्रिंग) स्ट्रिंग की कोई भी वैल्यू.
उदाहरण
SHA-256 ऑब्जेक्ट को अपडेट करें:
_sha256.update("salt_value"); _sha256.update("some text");
SHA-256 ऑब्जेक्ट को हेक्स स्ट्रिंग के तौर पर दिखाना
var _hashed_token = _sha256.digest();
SHA-256 ऑब्जेक्ट को base64 स्ट्रिंग के तौर पर दिखाएं
var _hashed_token = _sha256.digest64();
SHA-512 ऑब्जेक्ट के साथ काम करना
SHA-512 ऑब्जेक्ट बनाए जा सकते हैं, उन्हें अपडेट किया जा सकता है, और उन्हें हेक्स और base64 वैल्यू में बदला जा सकता है.
नया SHA-512 ऑब्जेक्ट बनाना
var _sha512 = crypto.getSHA512();
SHA-512 ऑब्जेक्ट को अपडेट करना
सिंटैक्स
_sha512.update(value);
पैरामीटर
- value - (स्ट्रिंग) स्ट्रिंग की कोई भी वैल्यू.
उदाहरण
SHA-512 ऑब्जेक्ट को अपडेट करें:
_sha512.update("salt_value"); _sha512.update("some text");
SHA-512 ऑब्जेक्ट को हेक्स स्ट्रिंग के तौर पर दिखाना
var _hashed_token = _sha512.digest();
SHA-512 ऑब्जेक्ट को base64 स्ट्रिंग के तौर पर दिखाएं
var _hashed_token = _sha512.digest64();
MD5 ऑब्जेक्ट के साथ काम करना
MD5 ऑब्जेक्ट बनाए जा सकते हैं, उन्हें अपडेट किया जा सकता है, और उन्हें हेक्स और base64 वैल्यू में बदला जा सकता है.
नया MD5 ऑब्जेक्ट बनाना
var _md5 = crypto.getMD5();
MD5 ऑब्जेक्ट को अपडेट करना
सिंटैक्स
_md5.update(value);
पैरामीटर
- value - (स्ट्रिंग) स्ट्रिंग की कोई भी वैल्यू.
उदाहरण
कोई MD5 ऑब्जेक्ट अपडेट करने के लिए:
_md5.update("salt_value"); _md5.update("some text");
MD5 ऑब्जेक्ट को हेक्स स्ट्रिंग के तौर पर दिखाना
var _hashed_token = _md5.digest();
MD5 ऑब्जेक्ट को base64 स्ट्रिंग के तौर पर दिखाना
var _hashed_token = _md5.digest64();
क्रिप्टो के लिए तारीख/समय से जुड़ी सहायता
क्रिप्टो ऑब्जेक्ट, तारीख/समय के फ़ॉर्मैट करने के पैटर्न के साथ काम करता है.
crypto.dateFormat()
स्ट्रिंग फ़ॉर्मैट में तारीख दिखाता है.
सिंटैक्स
crypto.dateFormat(format, [timezone], [time])
पैरामीटर
- format - (स्ट्रिंग) इस पैरामीटर को लागू करने का तरीका यह java.text.SimpleDateFormat है. उदाहरण के लिए: 'yyyy-MM-DD HH:mm:ss.SSS'
- timezone - (स्ट्रिंग, ज़रूरी नहीं) इसके लिए लागू करने का तरीका पैरामीटर java.util.TimeZone है. यह पैरामीटर समान डिफ़ॉल्ट है: यूटीसी
- time - (संख्या, ज़रूरी नहीं) फ़ॉर्मैट करने के लिए यूनिक्स टाइमस्टैंप वैल्यू. डिफ़ॉल्ट: मौजूदा समय
उदाहरण
वर्तमान समय प्राप्त करें, मिलीसेकंड तक:
var _now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS');
पैसिफ़िक टाइम ज़ोन के हिसाब से मौजूदा समय का पता लगाएं:
var _pst = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST');
अब से दस सेकंड का मान पाएं:
var _timeNow = Number(context.getVariable('system.timestamp')); var ten_seconds = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow + 10 * 1000);
अन्य उदाहरण. java.text.SimpleDateFormat के दस्तावेज़ भी देखें.
var _pst = crypto.dateFormat('M');
var _pst = crypto.dateFormat('EEE, d MMM yyyy HH:mm:ss Z');
var _pst = crypto.dateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
पाने के लिए getHash() का इस्तेमाल करें काम करने वाला कोई हैश ऑब्जेक्ट
उदाहरण
var _hash1 = crypto.getHash('MD5'); var _hash2 = crypto.getHash('SHA-1'); var _hash3 = crypto.getHash('SHA-256'); var _hash4 = crypto.getHash('SHA-512');
क्रिप्टो के साथ सैंपल
try { // get values to use with hash functions var salt = context.getVariable("salt") || 'SomeHardCodedSalt'; var host = context.getVariable("request.header.Host"); var unhashed_token = ""; var _timeNow = Number(context.getVariable('system.timestamp')); var now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow); unhashed_token = "|" + now + "|" + host // generate a hash with the unhashedToken: var sha512 = crypto.getSHA512(); sha512.update(salt); sha512.update(unhashed_token); // convert to base64 var base64_token = sha512.digest64(); // set headers context.setVariable("request.header.now", now); context.setVariable("request.header.token", base64_token); } catch(e) { throw 'Error in Javascript'; }
कॉन्टेक्स्ट ऑब्जेक्ट रेफ़रंस
- कॉन्टेक्स्ट ऑब्जेक्ट की खास जानकारी
- कॉन्टेक्स्ट ऑब्जेक्ट के तरीके
- कॉन्टेक्स्ट ऑब्जेक्ट प्रॉपर्टी
- कॉन्टेक्स्ट ऑब्जेक्ट चाइल्ड
अनुरोध करने/जवाब देने के लिए हर लेन-देन के लिए एक context
ऑब्जेक्ट बनाया जाता है.
एपीआई प्रॉक्सी. context
ऑब्जेक्ट, वैरिएबल पाने, सेट करने, और हटाने के तरीके दिखाता है
.
वैरिएबल किसी लेन-देन से जुड़ी प्रॉपर्टी के बारे में बताते हैं. दिन का समय,
अनुरोध करने वाले क्लाइंट, अनुरोध करने वाले क्लाइंट के उपयोगकर्ता-एजेंट, और टारगेट सेवा के यूआरएल
context
में उपलब्ध वैरिएबल के सभी उदाहरण. इसलिए,
context
का इस्तेमाल, लॉजिक बनाने के लिए किया जा सकता है. यह लॉजिक, लागू करने के लिए इन प्रॉपर्टी पर निर्भर करता है
कस्टम व्यवहार.
फ़्लो वैरिएबल का रेफ़रंस देखें और वैरिएबल निकालें नीति पढ़ें.
संदर्भ ऑब्जेक्ट की खास जानकारी
इस टेबल में, कॉन्टेक्स्ट ऑब्जेक्ट और उसके चाइल्ड एंट्री के बारे में कम शब्दों में जानकारी दी गई है. साथ ही, प्रॉपर्टी की सूची दी गई है जो हर स्थिति से जुड़ी होती हैं.
नाम | ब्यौरा | प्रॉपर्टी |
---|---|---|
context |
मैसेज प्रोसेस करने वाली पाइपलाइन के कॉन्टेक्स्ट और अनुरोध और उसके जवाब के लिए रैपर ProxyEndpoint और TargetEndpoint की मदद से एक्ज़ीक्यूट किए जाने वाले फ़्लो. | फ़्लो, सेशन |
context. proxyRequest |
एक ऑब्जेक्ट जो ProxyEndpoint को इनबाउंड अनुरोध वाले मैसेज दिखाता है ( एपीआई प्रॉक्सी से ऐप्लिकेशन का अनुरोध किया जा रहा है) | हेडर, क्वेरी पैरामीटर, तरीका, मुख्य हिस्सा, यूआरएल |
context. targetRequest |
एक ऑब्जेक्ट जो TargetEndpoint (इससे) से आउटबाउंड अनुरोध वाले मैसेज को दिखाता है (बैकएंड सेवा के लिए एपीआई प्रॉक्सी). | हेडर, क्वेरी पैरामीटर, तरीका, मुख्य हिस्सा, यूआरएल |
context. targetResponse |
एक ऑब्जेक्ट जो इनबाउंड टारगेट रिस्पॉन्स मैसेज दिखाता है (बैकएंड सेवा से) एपीआई प्रॉक्सी में बदलें) | हेडर, कॉन्टेंट, स्टेटस |
context. proxyResponse |
एक ऑब्जेक्ट जो आउटबाउंड प्रॉक्सी रिस्पॉन्स मैसेज को दिखाता है (एपीआई प्रॉक्सी से अनुरोध करने वाला ऐप्लिकेशन) | हेडर, कॉन्टेंट, स्टेटस |
context.flow |
मौजूदा फ़्लो का नाम. | नीचे context.flow देखें. |
context.session |
नाम/वैल्यू पेयर का मैप, जिसका इस्तेमाल दो अलग-अलग चरणों के बीच ऑब्जेक्ट को पास करने के लिए किया जा सकता है
उसी संदर्भ में एक्ज़ीक्यूट किया जा रहा है. उदाहरण के लिए: context.session['key'] = 123 . |
इस ऑब्जेक्ट का इस्तेमाल कब और कब नहीं करना चाहिए, इस बारे में ज़्यादा जानकारी के लिए यह देखें Apigee समुदाय के बारे में चर्चा. |
संदर्भ ऑब्जेक्ट के तरीके
context.getVariable()
पहले से तय किए गए या कस्टम वैरिएबल की वैल्यू हासिल करता है.
सिंटैक्स
context.getVariable("variable-name");
उदाहरण
मौजूदा साल की वैल्यू पाने के लिए:
var year = context.getVariable('system.time.year');
context.setVariable()
यह किसी कस्टम वैरिएबल या लिखने लायक पहले से तय किए गए वैरिएबल के लिए वैल्यू सेट करता है.
सिंटैक्स
context.setVariable("variable-name", value);
उदाहरण
वैरिएबल सेट करने के लिए एक आम स्थिति यह होती है कि जब एपीआई प्रॉक्सी को डाइनैमिक तौर पर
टारगेट यूआरएल. नीचे दिया गया JavaScript USER.name
नाम के वैरिएबल की वैल्यू हासिल करता है,
उस वैल्यू को यूआरएल में क्वेरी पैरामीटर के रूप में जोड़ता है
http://mocktarget.apigee.net?user=
, और फिर पहले से तय की गई वैल्यू सेट करता है
target.url
उस वैल्यू के लिए.
context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
context.removeVariable()
कॉन्टेक्स्ट से वैरिएबल हटाता है.
सिंटैक्स
context.removeVariable('variable-name');
कॉन्टेक्स्ट ऑब्जेक्ट की प्रॉपर्टी
flow
प्रॉपर्टी एक ऐसी स्ट्रिंग है जो मौजूदा एपीआई प्रॉक्सी फ़्लो की पहचान करती है. यह
प्रॉपर्टी का इस्तेमाल उस फ़्लो को बताने के लिए किया जाता है जिससे JavaScript जुड़ा होता है. इस्तेमाल की जा सकने वाली वैल्यू
हैं:
PROXY_REQ_FLOW
PROXY_RESP_FLOW
TARGET_REQ_FLOW
TARGET_RESP_FLOW
हर फ़्लो के नाम में PreFlow, PostFlow, और ProxyEndpoints या TargetEndpoints.
यह वैकल्पिक प्रॉपर्टी तब काम आती है, जब सामान्य JavaScript को एक से ज़्यादा फ़्लो में लागू किया जाता है, लेकिन उसके काम करने के फ़्लो पर निर्भर करता है कि उसका व्यवहार अलग-अलग हो सकता है. फ़्लो प्रॉपर्टी का इस्तेमाल करना का इस्तेमाल किया जा सकता है, जिसका मकसद कई एपीआई प्रॉक्सी में फिर से इस्तेमाल करना है, जिनमें कोड लॉजिक को एक्ज़ीक्यूट करने से पहले, मौजूदा फ़्लो की जांच करना ज़रूरी है.
उदाहरण
सिर्फ़ targetRequest फ़्लो पर एचटीटीपी हेडर सेट करें:
if (context.flow=="TARGET_REQ_FLOW") { context.targetRequest.headers['TARGET-HEADER-X']='foo'; }
सामग्री को केवल प्रॉक्सीResponse फ़्लो पर सेट करें:
if (context.flow=="PROXY_RESP_FLOW") { context.proxyResponse.content='bar'; }
नाम/वैल्यू पेयर का मैप, जिसका इस्तेमाल करके लागू की जा रही दो नीतियों के बीच ऑब्जेक्ट को पास किया जा सकता है में तय करें.
उदाहरण
सेशन में कोई वैल्यू सेट करें:
context.session['key'] = 123;
सेशन से वैल्यू पाएं:
var value = context.session['key']; // 123अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
कॉन्टेक्स्ट ऑब्जेक्ट चाइल्ड
जैसा कि नीचे दिखाया गया है, एक पूरे एपीआई के प्रॉक्सी फ़्लो में चार अलग-अलग चरण होते हैं. हर चरण में इससे जुड़ा एक मैसेज ऑब्जेक्ट, जो कॉन्टेक्स्ट ऑब्जेक्ट का चाइल्ड होता है:
context.proxyRequest
: अनुरोध करने वाले से मिला इनबाउंड अनुरोध मैसेज क्लाइंट.context.targetRequest
: बैकएंड को भेजा गया आउटबाउंड अनुरोध संदेश सेवा.context.proxyResponse
: आउटबाउंड जवाब संदेश अनुरोध कर रहा है.context.targetResponse
: बैकएंड से इनबाउंड अनुरोध मैसेज मिला सेवा.
यहां दिए सेक्शन में, इन ऑब्जेक्ट के तरीकों और प्रॉपर्टी के बारे में बताया गया है:
को दबाकर रखें कॉन्टेक्स्ट.*चाइल्ड ऑब्जेक्ट का अनुरोध करें.
एपीआई प्रॉक्सी में चलाए जाने वाले हर एचटीटीपी ट्रांज़ैक्शन के लिए, अनुरोध के दो मैसेज ऑब्जेक्ट बनाया गया: एक इनबाउंड (क्लाइंट से अनुरोध) और एक आउटबाउंड (वह अनुरोध एपीआई प्रॉक्सी को सबमिट किया और बैकएंड टारगेट में सबमिट किया.)
context
ऑब्जेक्ट में ऐसे चाइल्ड ऑब्जेक्ट हैं जो इन अनुरोध मैसेज को दिखाते हैं:
context.proxyRequest
और context.targetRequest
. ये ऑब्जेक्ट आपको
उस अनुरोध फ़्लो में प्रॉपर्टी ऐक्सेस करें, जो आपके JavaScript कोड के दायरे में आती हो
लागू करता है.
ध्यान दें: ऐक्सेस करने के लिए, शॉर्टहैंड ऑब्जेक्ट request
का भी इस्तेमाल किया जा सकता है
ये प्रॉपर्टी, अनुरोध की प्रोसेस में शामिल की जाती हैं. request
ऑब्जेक्ट, इनमें से किसी एक का रेफ़रंस देता है
context.proxyRequest
या context.targetRequest
, यह इस पर निर्भर करता है कि आप कहां हैं
किस फ़्लो को आपका JavaScript कोड लागू करता है.
कॉन्टेक्स्ट.*चाइल्ड ऑब्जेक्ट प्रॉपर्टी का अनुरोध करें
प्रॉपर्टी का नाम | ब्यौरा |
---|---|
url |
अनुरोध का पूरा यूआरएल, इन प्रॉपर्टी से मिलकर बना होता है:
|
उदाहरण: context.targetRequest.url = 'http://www.example.com/path?q1=1' context.targetRequest.protocol ='https'; |
|
headers |
|
उदाहरण: इस एचटीटीपी अनुरोध के लिए: POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Zनीचे दिया गया JavaScript: context.proxyRequest.headers['Content-Type']; context.proxyRequest.headers['Authorization']; दिए गए मान दिखाएगा application/json Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z |
|
queryParams |
|
उदाहरण: "?city=PaloAlto&city=NewYork" इसे इस तौर पर ऐक्सेस किया जा सकता है: context.proxyRequest.queryParams['city']; // == 'PaloAlto' context.proxyRequest.queryParams['city'][0] // == 'PaloAlto' context.proxyRequest.queryParams['city'][1]; // == 'NewYork' context.proxyRequest.queryParams['city'].length(); // == 2 |
|
method |
एचटीटीपी क्रिया ( |
उदाहरण: इस अनुरोध के लिए: POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z यहां दिया गया JavaScript: context.proxyRequest.method; निम्न मान देगा POST |
|
body |
एचटीटीपी अनुरोध का मैसेज का मुख्य हिस्सा (पेलोड). अनुरोध के मुख्य हिस्से में ये सदस्य हैं:
|
उदाहरण: एक्सएमएल बॉडी के लिए: <customer number='1'> <name>Fred<name/> <customer/> एक्सएमएल ऑब्जेक्ट के एलिमेंट को ऐक्सेस करने के लिए, यह तरीका अपनाएं: var name = context.targetRequest.body.asXML.name; एक्सएमएल एट्रिब्यूट को ऐक्सेस करने के लिए, var number = context.targetRequest.body.asXML.@number; JSON अनुरोध के मुख्य हिस्से के लिए: { "a": 1 , "b" : "2" } var a = context.proxyRequest.body.asJSON.a; // == 1 var b = context.proxyRequest.body.asJSON.b; // == 2 फ़ॉर्म पैरामीटर पढ़ने के लिए: "vehicle=Car&vehicle=Truck" v0 = context.proxyRequest.body.asForm['vehicle'][0]; v1 = context.proxyRequest.body.asForm['vehicle'][1]; |
संदर्भ.*चाइल्ड ऑब्जेक्ट का जवाब
एपीआई प्रॉक्सी में चलाए जाने वाले हर एचटीटीपी ट्रांज़ैक्शन के लिए, रिस्पॉन्स मैसेज के दो ऑब्जेक्ट बनाया गया: एक इनबाउंड (बैकएंड सेवा से मिला रिस्पॉन्स) और एक आउटबाउंड (रिस्पॉन्स) क्लाइंट को वापस भेजा जाता है.)
कॉन्टेक्स्ट ऑब्जेक्ट में ऐसे चाइल्ड ऑब्जेक्ट हैं जो ये रिस्पॉन्स मैसेज दिखाते हैं:
context.proxyResponse
और context.targetResponse
. ये ऑब्जेक्ट आपको
उस रिस्पॉन्स फ़्लो में प्रॉपर्टी ऐक्सेस करें जो आपके JavaScript कोड के दायरे में आती हो
लागू करता है.
ध्यान दें: ऐक्सेस करने के लिए, शॉर्टहैंड ऑब्जेक्ट response
का भी इस्तेमाल किया जा सकता है
ये प्रॉपर्टी, रिस्पॉन्स फ़्लो से मिलती हैं. response
ऑब्जेक्ट, इनमें से किसी एक का रेफ़रंस देता है
context.proxyResponse
या context.targetResponse
, यह इस पर निर्भर करता है कि आप कहां हैं
किस फ़्लो को आपका JavaScript कोड लागू करता है.
कॉन्टेक्स्ट.*रिस्पॉन्स ऑब्जेक्ट प्रॉपर्टी
प्रॉपर्टी का नाम | ब्यौरा |
---|---|
headers |
|
उदाहरण: var cookie = context.targetResponse.headers['Set-Cookie']; |
|
status |
प्रॉपर्टी के तौर पर स्थिति का मैसेज दिखाने वाला स्टेटस कोड. स्थिति कोड और स्थिति संदेश, दोनों प्रॉपर्टी के तौर पर उपलब्ध हैं. |
उदाहरण: var status = context.targetResponse.status.code; // 200 var msg = context.targetResponse.status.message; // "OK" |
|
content |
रिस्पॉन्स वाले मैसेज का एचटीटीपी बॉडी (पेलोड कॉन्टेंट). जवाब के कॉन्टेंट में ये सदस्य हैं: context.targetResponse.content.asXML; context.targetResponse.content.asJSON; |
.asXML नोटेशन का इस्तेमाल किया जा रहा है
.asXML
नोटेशन का इस्तेमाल करके, एक्सएमएल दस्तावेज़ को देखने का एक आसान तरीका है.
इस सेक्शन में बताया गया है कि इस नोटेशन का इस्तेमाल कैसे किया जाता है और यह नोटेशन से किस तरह अलग है
request.content
और context.proxyRequest.content
.
उदाहरण के लिए:
request.content.asXML
या
context.proxyRequest.content.asXML
किसी स्ट्रिंग में *.content
और *.content.asXML
, दोनों फ़ॉर्म का इस्तेमाल किया जा सकता है
का इस्तेमाल किया जाता है और JavaScript उन्हें ज़रूरत से ज़्यादा स्ट्रिंग में बदल देता है. पहले वाले मामले में
(*.content
), स्ट्रिंग में सभी एलान और एक्सएमएल टिप्पणियां शामिल होती हैं. इस
बाद वाला केस (*.content.asXML
), नतीजे की स्ट्रिंग वैल्यू को हटा दिया जाता है
एलानों और टिप्पणियों के बारे में बताएँ.
उदाहरण
msg.content:
<?xml version="1.0" encoding="UTF-8"?> <yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US"> <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com" </yahoo:description> </yahoo:error> <!-- mg023.mail.gq1.yahoo.com uncompressed/chunked Sat Dec 14 01:23:35 UTC 2013 -->
msg.content.asXML:
<?xml version="1.0" encoding="UTF-8"?> <yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US"> <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com" </yahoo:description> </yahoo:error>
इसके अलावा, एक्सएमएल की हैरारकी को देखने के लिए .asXML
फ़ॉर्म का इस्तेमाल किया जा सकता है. इसके लिए,
एलिमेंट और एट्रिब्यूट के नाम बताकर. क्रम का पार नहीं हो सकता
दूसरे सिंटैक्स का इस्तेमाल करके.
JavaScript की मदद से डीबग करना प्रिंट() स्टेटमेंट
अगर कस्टम JavaScript कोड को चलाने के लिए JavaScript नीति का इस्तेमाल किया जा रहा है, तो ध्यान रखें कि प्रिंट करें() फ़ंक्शन का इस्तेमाल करके, ट्रेस टूल को डीबग की जानकारी दें. यह फ़ंक्शन सीधे तौर पर उपलब्ध है JavaScript ऑब्जेक्ट मॉडल की मदद से ऐसा करता है. उदाहरण के लिए:
if (context.flow=="PROXY_REQ_FLOW") { print("In proxy request flow"); var username = context.getVariable("request.queryparam.user"); print("Got query param: " + username); context.setVariable("USER.name", username); print("Set query param: " + context.getVariable("USER.name")); } if (context.flow=="TARGET_REQ_FLOW") { print("In target request flow"); var username = context.getVariable("USER.name"); var url = "http://mocktarget.apigee.net/user?" context.setVariable("target.url", url + "user=" + username); print("callout to URL: ", context.getVariable("target.url")); }
आउटपुट देखने के लिए, खोज बॉक्स के सबसे नीचे सभी लेन-देन से आउटपुट चुनें
विंडो ट्रेस करें. आपको stepExecution-stdout
नाम की ट्रेस प्रॉपर्टी में भी आउटपुट मिल सकता है.
httpक्लाइंट के साथ JavaScript कॉलआउट बनाना
किसी भी यूआरएल पर एक से ज़्यादा, पैरलल, एसिंक्रोनस एचटीटीपी अनुरोध करने के लिए httpClient
का इस्तेमाल करें
एपीआई प्रॉक्सी फ़्लो में लागू होने वाले कस्टम JavaScript कोड से.
httpClient
ऑब्जेक्ट, Apigee Edge JavaScript ऑब्जेक्ट से दिखता है
मॉडल के बारे में ज़्यादा जानें.
httpClient के बारे में
httpClient
ऑब्जेक्ट, Apigee Edge पर चल रहे कस्टम JavaScript कोड के संपर्क में है
JavaScript ऑब्जेक्ट मॉडल की मदद से ऐसा करता है. किसी एपीआई प्रॉक्सी में कस्टम JavaScript अटैच करने के लिए,
JavaScript की नीति. जब
नीति चलती है, तो कस्टम JavaScript कोड लागू होता है.
httpClient
ऑब्जेक्ट, कंपोज़िट सेवाओं को डेवलप करने के लिए काम का है या
मैशअप (कई गानों को मिलाकर बनाए गए गाने) उदाहरण के लिए, एक से ज़्यादा बैकएंड कॉल को एक ही एपीआई तरीके में इकट्ठा किया जा सकता है.
आम तौर पर, इस ऑब्जेक्ट का इस्तेमाल, सर्विसकॉलआउट नीति के विकल्प के तौर पर किया जाता है.
इस्तेमाल का बुनियादी पैटर्न यहां दिया गया है. कोई अनुरोध ऑब्जेक्ट इंस्टैंशिएट करें, उसे एक यूआरएल असाइन करें (उदाहरण के लिए,
जिस बैकएंड सेवा को कॉल करना है), उस अनुरोध के साथ httpClient.send
को कॉल करें
ऑब्जेक्ट है.
var myRequest = new Request(); myRequest.url = "http://www.example.com"; var exchangeObj = httpClient.send(myRequest);
httpक्लाइंट संदर्भ
एचटीटीपी क्लाइंट दो तरीके दिखाता है: get()
और send()
.
httpClient.get()
सामान्य एचटीटीपी GET
अनुरोधों के लिए एक सुविधाजनक तरीका, जिसमें एचटीटीपी हेडर का इस्तेमाल नहीं किया जा सकता.
इस्तेमाल किए जाने से जुड़ी जानकारी
var exchangeObj = httpClient.get(url);
लौटाए जाने वाले प्रॉडक्ट
यह तरीका exchange
ऑब्जेक्ट दिखाता है. इस ऑब्जेक्ट में कोई प्रॉपर्टी नहीं है और यह
रिपोर्ट में इन तरीकों की जानकारी दी जाती है:
isError()
: (बूलियन)true
दिखाता है, अगर httpClient यह नहीं कर पाता सर्वर से कनेक्ट करते हैं. एचटीटीपी स्टेटस कोड4xx
और5xx
का नतीजा मिलता हैisError()
false
, क्योंकि कनेक्शन पूरा हुआ और एक मान्य जवाब मिला कोड वापस किया गया. अगरisError()
,true
दिखाता है, तो इस नंबर पर कॉल किया जाएगाgetResponse()
JavaScriptundefined
दिखाता है.isSuccess()
: (बूलियन) भेजने के पूरा होने परtrue
लौटाता है और हो गया.isComplete()
: (बूलियन) अनुरोध होने परtrue
दिखाता है पूरा हुआ.waitForComplete()
: अनुरोध पूरा होने तक थ्रेड को रोकता है (पूरा नहीं हुआ या गड़बड़ी).getResponse()
: (object) रिस्पॉन्स ऑब्जेक्ट दिखाता है, अगरhttpClient.send()
पूरी हो गई और सफल रही. लौटाए गए ऑब्जेक्ट में यह है का इस्तेमाल करने के लिए एक जैसे तरीके और प्रॉपर्टी को बनाए रखें. कॉन्टेक्स्ट ऑब्जेक्ट की खास जानकारी देखें.getError()
: (string) अगरhttpClient.send()
को कॉल करने पर नतीजा मिला कोई गड़बड़ी होने पर, गड़बड़ी के मैसेज को स्ट्रिंग के तौर पर दिखाता है.
उदाहरण
पूरी तरह से कॉन्फ़िगर किया गया अनुरोध ऑब्जेक्ट भेजें, जिसमें एचटीटीपी की प्रॉपर्टी शामिल हों अनुरोध. जवाब को प्रोसेस करने के लिए, ब्लॉक न करने वाले कॉलबैक का इस्तेमाल करें.
// Add the required the headers for making a specific API request var headers = {'X-SOME-HEADER' : 'some value' }; // Make a GET API request along with headers var myRequest = new Request("http://www.example.com","GET",headers); // Define the callback function and process the response from the GET API request function onComplete(response,error) { // Check if the HTTP request was successful if (response) { context.setVariable('example.status', response.status); } else { context.setVariable('example.error', 'Woops: ' + error); } } // Specify the callback Function as an argument httpClient.get(myRequest, onComplete);
JavaScript नीति का इस्तेमाल करना
प्रॉक्सी फ़्लो में कस्टम JavaScript कोड अटैच करने के लिए, JavaScript नीति का इस्तेमाल करें. JavaScript की नीति देखें.
मिलते-जुलते विषय
- JavaScript नीति
- JavaScript ऑब्जेक्ट मॉडल
- बुनियादी सैंपल और निर्देशों के लिए, प्रोग्रामिंग एपीआई देखें JavaScript वाली प्रॉक्सी.
- काम करने वाले JavaScript कोड के सैंपल के लिए, GitHub पर Apigee Edge के सैंपल देखें.
Apigee कम्यूनिटी के लेख
इस विषय से मिलते-जुलते ये लेख, Apigee पर उपलब्ध हैं कम्यूनिटी: