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

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

इस विषय में, Apigee Edge के JavaScript ऑब्जेक्ट मॉडल पर चर्चा की गई है. अगर आपको एपीआई प्रॉक्सी में कस्टम JavaScript जोड़ने के लिए JavaScript नीति का इस्तेमाल करना है, तो इस मॉडल को समझना ज़रूरी है.

EDGE JavaScript ऑब्जेक्ट मॉडल के बारे में जानकारी

Apigee Edge का JavaScript ऑब्जेक्ट मॉडल, संबंधित प्रॉपर्टी वाले ऑब्जेक्ट के बारे में बताता है. ये ऐसे ऑब्जेक्ट होते हैं जो Apigee Edge के प्रॉक्सी फ़्लो में, JavaScript कोड को चलाने के लिए उपलब्ध होते हैं. इस कस्टम कोड को एपीआई प्रॉक्सी फ़्लो में अटैच करने के लिए, JavaScript की नीति का इस्तेमाल किया जाता है.

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

  • context: यह एक ऑब्जेक्ट है, जो मैसेज के कॉन्टेक्स्ट का ऐक्सेस देता है
  • request: एक शॉर्टहैंड, जो अनुरोध ऑब्जेक्ट को ऐक्सेस करने की अनुमति देता है
  • response: एक शॉर्टहैंड, जो अनुरोध ऑब्जेक्ट को ऐक्सेस करने की अनुमति देता है
  • crypto: अलग-अलग हैश फ़ंक्शन देता है
  • print: आउटपुट उत्सर्जित करने वाला फ़ंक्शन
  • प्रॉपर्टी: इससे नीति में मौजूद कॉन्फ़िगरेशन प्रॉपर्टी को पढ़ने का ऐक्सेस मिलता है

कॉन्टेक्स्ट ऑब्जेक्ट

context ऑब्जेक्ट का स्कोप ग्लोबल है. यह एपीआई प्रॉक्सी फ़्लो में हर जगह उपलब्ध है. इसमें चार चाइल्ड ऑब्जेक्ट हैं: proxyRequest, proxyResponse, targetRequest, targetResponse. ये चाइल्ड ऑब्जेक्ट, ऐंबियंट अनुरोध और रिस्पॉन्स के दायरे में आते हैं. इनमें प्रॉक्सी अनुरोध और रिस्पॉन्स या टारगेट अनुरोध और रिस्पॉन्स शामिल है. उदाहरण के लिए, अगर JavaScript नीति, फ़्लो के प्रॉक्सी एंडपॉइंट वाले हिस्से में काम करती है, तो इसका मतलब है कि context.proxyRequest और context.proxyResponse ऑब्जेक्ट स्कोप में हैं. अगर JavaScript टारगेट फ़्लो में चलता है, तो context.targetRequest और context.targetResponse ऑब्जेक्ट स्कोप में हैं.

context ऑब्जेक्ट में, प्रॉपर्टी और तरीके भी होते हैं, जिनके बारे में इस विषय में ज़्यादा जानकारी दी गई है. उदाहरण के लिए, JavaScript कोड के इस उदाहरण में दिए गए उदाहरण में, context.flow प्रॉपर्टी का इस्तेमाल किया गया है और context पर get/setVariable() तरीकों को कॉल किया गया है.

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 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 है. यह पैरामीटर समान डिफ़ॉल्ट है: UTC
  • time - (संख्या, ज़रूरी नहीं) फ़ॉर्मैट करने के लिए यूनिक्स टाइमस्टैंप की वैल्यू. डिफ़ॉल्ट: मौजूदा समय

उदाहरण

मिलीसेकंड तक मौजूदा समय की जानकारी पाएं:

var _now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS');

पैसिफ़िक टाइम ज़ोन का मौजूदा समय जानें:

var _pst = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST');

अब से 10 सेकंड की वैल्यू पाएं:

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 ऑब्जेक्ट की खास जानकारी

इस टेबल में, कॉन्टेक्स्ट ऑब्जेक्ट और इसके चाइल्ड पेजों के बारे में कम शब्दों में जानकारी दी गई है. साथ ही, इसमें उन प्रॉपर्टी की जानकारी दी गई है जो हर एलिमेंट से जुड़ी हैं.

नाम ब्यौरा प्रॉपर्टी
context मैसेज प्रोसेस करने वाले पाइपलाइन संदर्भ और अनुरोध और रिस्पॉन्स फ़्लो के लिए एक रैपर, जिन्हें प्रॉक्सीEndpoint और TargetEndpoint चलाते हैं. फ़्लो, सेशन
context.proxyRequest एक ऐसा ऑब्जेक्ट जो प्रॉक्सीEndpoint को भेजे जाने वाले इनबाउंड अनुरोध मैसेज को दिखाता है (अनुरोध करने वाले ऐप्लिकेशन से एपीआई प्रॉक्सी तक) शीर्षलेख, क्वेरी पैरामीटर, विधि, मुख्य भाग, url
context.targetRequest यह एक ऑब्जेक्ट है, जो TargetEndpoint (एपीआई प्रॉक्सी से बैकएंड सेवा) से मिलने वाले आउटबाउंड अनुरोध मैसेज को दिखाता है. शीर्षलेख, क्वेरी पैरामीटर, विधि, मुख्य भाग, url
context.targetResponse ऐसा ऑब्जेक्ट जो इनबाउंड टारगेट रिस्पॉन्स मैसेज (बैकएंड सेवा से लेकर एपीआई प्रॉक्सी तक) को दिखाता है हेडर, कॉन्टेंट, स्टेटस
context.proxyResponse एक ऑब्जेक्ट जो आउटबाउंड प्रॉक्सी रिस्पॉन्स मैसेज (एपीआई प्रॉक्सी से अनुरोध करने वाले ऐप्लिकेशन तक) दिखाता है हेडर, कॉन्टेंट, स्टेटस
context.flow मौजूदा फ़्लो का नाम. नीचे context.flow देखें.
context.session नाम/वैल्यू पेयर का मैप, जिसका इस्तेमाल करके ऑब्जेक्ट को एक ही कॉन्टेक्स्ट में, दो अलग-अलग चरणों के बीच पास किया जा सकता है. उदाहरण के लिए: context.session['key'] = 123. इस ऑब्जेक्ट का इस्तेमाल कब और कब न करना चाहिए, इस बारे में ज़्यादा जानकारी के लिए, यह Apigee समुदाय की चर्चा देखें.

context ऑब्जेक्ट वाले तरीके

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, और प्रॉक्सीEndpoints या TargetEndpoints में बताया गया कोई भी कंडिशनल फ़्लो शामिल है.

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

उदाहरण

सिर्फ़ targetRequest फ़्लो पर एचटीटीपी हेडर सेट करें:

if (context.flow=="TARGET_REQ_FLOW") {
     context.targetRequest.headers['TARGET-HEADER-X']='foo';
}

कॉन्टेंट को सिर्फ़ प्रॉक्सी रिस्पॉन्स फ़्लो पर सेट करें:

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: बैकएंड सेवा से मिला इनबाउंड अनुरोध का मैसेज.

इन सेक्शन में, इन ऑब्जेक्ट के तरीकों और प्रॉपर्टी के बारे में बताया गया है:

कॉन्टेक्स्ट.*चाइल्ड ऑब्जेक्ट का अनुरोध करें

हर एचटीटीपी लेन-देन, एपीआई प्रॉक्सी में एक्ज़ीक्यूट होता है, के लिए दो अनुरोध मैसेज ऑब्जेक्ट बनाए जाते हैं: एक inbound (क्लाइंट से अनुरोध) और एक inbound (एपीआई प्रॉक्सी से जनरेट किया गया और बैकएंड टारगेट को सबमिट किया गया अनुरोध).

context ऑब्जेक्ट में वे चाइल्ड ऑब्जेक्ट हैं जो इन अनुरोध मैसेज को दिखाते हैं: context.proxyRequest और context.targetRequest. इन ऑब्जेक्ट की मदद से, आपके JavaScript कोड के काम करने पर, अनुरोध फ़्लो में मौजूद उन प्रॉपर्टी को ऐक्सेस किया जा सकता है.

ध्यान दें: अनुरोध के फ़्लो में, इन प्रॉपर्टी को ऐक्सेस करने के लिए, शॉर्टहैंड ऑब्जेक्ट request का भी इस्तेमाल किया जा सकता है. आपका JavaScript कोड, फ़्लो में कहां ट्रिगर होता है, इसके आधार पर request ऑब्जेक्ट, context.proxyRequest या context.targetRequest के बारे में बताता है.

कॉन्टेक्स्ट.*चाइल्ड ऑब्जेक्ट प्रॉपर्टी का अनुरोध करें

प्रॉपर्टी का नाम ब्यौरा
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.*चाइल्ड ऑब्जेक्ट को रिस्पॉन्स देना

हर एचटीटीपी लेन-देन के लिए, एपीआई प्रॉक्सी में रिस्पॉन्स देने वाले दो ऑब्जेक्ट बनाए जाते हैं: एक inbound (बैकएंड सेवा से मिलने वाला रिस्पॉन्स) और एक inbound (क्लाइंट को वापस भेजा जाने वाला रिस्पॉन्स.)

कॉन्टेक्स्ट ऑब्जेक्ट में वे चाइल्ड ऑब्जेक्ट हैं जो इन रिस्पॉन्स मैसेज को दिखाते हैं: context.proxyResponse और context.targetResponse. इन ऑब्जेक्ट की मदद से, रिस्पॉन्स फ़्लो में मौजूद उन प्रॉपर्टी को ऐक्सेस किया जा सकता है जो JavaScript कोड के काम करने के दौरान दायरे में हैं.

ध्यान दें: शॉर्टहैंड ऑब्जेक्ट response का इस्तेमाल करके भी, रिस्पॉन्स फ़्लो से इन प्रॉपर्टी को ऐक्सेस किया जा सकता है. आपका JavaScript कोड, फ़्लो में कहां ट्रिगर होता है, इसके आधार पर response ऑब्जेक्ट, context.proxyResponse या context.targetResponse के बारे में बताता है.

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

प्रॉपर्टी का नाम ब्यौरा
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 Print() स्टेटमेंट की मदद से डीबग करना

अगर कस्टम JavaScript कोड को लागू करने के लिए, JavaScript नीति का इस्तेमाल किया जा रहा है, तो ध्यान रखें कि ट्रेस टूल में डीबग की जानकारी आउटपुट करने के लिए, Print() फ़ंक्शन का इस्तेमाल किया जा सकता है. यह फ़ंक्शन सीधे 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 नाम की ट्रेस प्रॉपर्टी में भी देखा जा सकता है.

httpClient की मदद से JavaScript कॉलआउट बनाना

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

httpClient के बारे में

httpClient ऑब्जेक्ट, JavaScript ऑब्जेक्ट मॉडल के ज़रिए Apigee Edge पर चल रहे कस्टम 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(): (बूलियन) अगर httpClient, सर्वर से कनेक्ट नहीं हो पाता है, तो true दिखाता है. एचटीटीपी स्टेटस कोड 4xx और 5xx की वजह से, isError() false मिला. कनेक्शन पूरा होने और मान्य रिस्पॉन्स कोड मिलने की वजह से ऐसा हुआ. अगर isError(), true दिखाता है, तो getResponse() को किए जाने वाले कॉल से JavaScript undefined दिखता है.
  • isSuccess(): (बूलियन) भेजने की प्रक्रिया पूरी होने और सफल होने पर true दिखाता है.
  • isComplete(): (बूलियन) अनुरोध पूरा होने पर true दिखाता है.
  • waitForComplete(): अनुरोध पूरा होने तक, थ्रेड को रोकता है. ऐसा तब तक होता है, जब तक अनुरोध पूरा नहीं होता या गड़बड़ी हो जाती है.
  • getResponse(): (Object) httpClient.send() के पूरा और सफल होने पर, रिस्पॉन्स ऑब्जेक्ट दिखाता है. नतीजे के तौर पर दिखाए गए ऑब्जेक्ट में, context.कुकी रिस्पॉन्स ऑब्जेक्ट की तरह ही तरीके और प्रॉपर्टी हैं. कॉन्टेक्स्ट ऑब्जेक्ट की खास जानकारी देखें.
  • getError(): (स्ट्रिंग) अगर 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 कम्यूनिटी पर मिल सकते हैं: