JavaScript ऑब्जेक्ट मॉडल

आपको 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 देखें.

JavaScript ऑब्जेक्ट मॉडल में print() फ़ंक्शन शामिल है. इसका इस्तेमाल डीबग करने के लिए किया जा सकता है जानकारी को एज ट्रेस टूल को भेजना है. JavaScript प्रिंट() की मदद से डीबग करने का तरीका देखें स्टेटमेंट.

प्रॉपर्टी ऑब्जेक्ट

नीति के कॉन्फ़िगरेशन में एलिमेंट का इस्तेमाल करते समय, 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');

कॉन्टेक्स्ट ऑब्जेक्ट की प्रॉपर्टी

context.flow

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

नाम/वैल्यू पेयर का मैप, जिसका इस्तेमाल करके लागू की जा रही दो नीतियों के बीच ऑब्जेक्ट को पास किया जा सकता है में तय करें.

उदाहरण

सेशन में कोई वैल्यू सेट करें:

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

url प्रॉपर्टी एक रीड/राइट सुविधा प्रॉपर्टी है, जो targetRequest के लिए स्कीम, होस्ट, पोर्ट, पाथ, और क्वेरी पैरामीटर.

अनुरोध का पूरा यूआरएल, इन प्रॉपर्टी से मिलकर बना होता है:

  • प्रोटोकॉल: यूआरएल का प्रोटोकॉल (उदाहरण के लिए, एचटीटीपी, एचटीटीपीएस)
  • पोर्ट: पोर्ट (उदाहरण के लिए, :80, :443)
  • होस्ट: यूआरएल का होस्ट (उदाहरण के लिए, www.example.com)
  • पाथ: यूआरआई का पाथ (उदाहरण के लिए, /v1/mocktarget)

url मिलते समय, यूआरएल इस फ़ॉर्मैट में दिया जाता है:

protocol://host:port/path?queryParams

उदाहरण:

context.targetRequest.url = 'http://www.example.com/path?q1=1'
context.targetRequest.protocol ='https';
headers

String => List की मैपिंग के तौर पर, एचटीटीपी अनुरोध के हेडर

उदाहरण:

इस एचटीटीपी अनुरोध के लिए:

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

String => List की मैपिंग के तौर पर, अनुरोध के लिए मैसेज क्वेरी पैरामीटर.

उदाहरण:

"?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

एचटीटीपी क्रिया (GET, POST, PUT, DELETE, PATCH वगैरह) अनुरोध से जुड़ी हैं

उदाहरण:

इस अनुरोध के लिए:

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z

यहां दिया गया JavaScript:

context.proxyRequest.method;

निम्न मान देगा

POST
body

एचटीटीपी अनुरोध का मैसेज का मुख्य हिस्सा (पेलोड).

अनुरोध के मुख्य हिस्से में ये सदस्य हैं:

  • context.targetRequest.body.asXML;
  • context.targetRequest.body.asJSON;
  • context.targetRequest.body.asForm;

उदाहरण:

एक्सएमएल बॉडी के लिए:

<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

String => List की मैपिंग के तौर पर, जवाब वाले मैसेज के एचटीटीपी हेडर.

उदाहरण:

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() JavaScript undefined दिखाता है.
  • 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 की नीति देखें.

मिलते-जुलते विषय

Apigee कम्यूनिटी के लेख

इस विषय से मिलते-जुलते ये लेख, Apigee पर उपलब्ध हैं कम्यूनिटी: