एक्सटेंशन की कॉल आउट नीति

आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस पेज पर जाएं Apigee X दस्तावेज़.
जानकारी

एपीआई प्रॉक्सी में एक्सटेंशन शामिल करने के लिए, एक्सटेंशन कॉलआउट नीति का इस्तेमाल करें.

एक्सटेंशन, Apigee Edge के बाहर किसी खास संसाधन का ऐक्सेस देता है. संसाधन, Google Cloud Platform की सेवाएं हो सकती हैं. जैसे, Cloud Storage या क्लाउड पर बोली को लिखाई में बदलने की सुविधा. हालांकि, वह रिसॉर्स, एचटीटीपी या एचटीटीपीएस पर ऐक्सेस किया जा सकने वाला कोई भी बाहरी संसाधन हो सकता है.

एक्सटेंशन की खास जानकारी के लिए, एक्सटेंशन क्या हैं? देखें शुरुआती ट्यूटोरियल के लिए, ट्यूटोरियल: एक्सटेंशन जोड़ना और उसका इस्तेमाल करना देखें.

एक्सटेंशन कॉल आउट नीति से किसी एक्सटेंशन को ऐक्सेस करने से पहले, आपको उस एक्सटेंशन पैकेज को जोड़ना, कॉन्फ़िगर करना, और डिप्लॉय करना होगा जो आपके Apigee Edge संगठन में पहले से इंस्टॉल है.

सैंपल

क्लाउड लॉगिंग एक्सटेंशन के साथ इस्तेमाल करने के लिए यहां एक उदाहरण नीति दी गई है:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="false" enabled="true" name="Logging-Extension">
        <DisplayName>Logging Extension</DisplayName>
        <Connector>cloud-extension-sample</Connector>
        <Action>log</Action>
        <Input>{
                "logName" : "example-log",
                "metadata" : "test-metadata",
                "message" : "This is a test"
        }</Input>
    <Output>cloud-extension-example-log</Output>
</ConnectorCallout>

इसके लिए ट्यूटोरियल: एक्सटेंशन का उपयोग करना देखें क्लाउड लॉगिंग एक्सटेंशन का उपयोग करके एक पूरा ट्यूटोरियल.

सभी उपलब्ध एक्सटेंशन के उदाहरणों के लिए, एक्सटेंशन रेफ़रंस की खास जानकारी देखें.

एक्सटेंशन की कॉलआउट नीति के बारे में जानकारी

जब आपको एपीआई प्रॉक्सी में मौजूद किसी बाहरी संसाधन को ऐक्सेस करने के लिए, कॉन्फ़िगर किए गए एक्सटेंशन का इस्तेमाल करना हो, तो एक्सटेंशन कॉलआउट नीति का इस्तेमाल करें.

इस नीति का इस्तेमाल करने से पहले, आपको इनकी ज़रूरत होगी:

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

PostClientFlow में एक्सटेंशन कॉलआउट नीति का इस्तेमाल करना

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

अगर आपको Google Cloud के लॉग इन करने वाले एक्सटेंशन को कॉल करने के लिए, एक्सटेंशन कॉल आउट नीति का इस्तेमाल करना है PostClientFlow से, पक्का करें कि features.allowExtensionsInPostClientFlow आपके संगठन में true पर सेट है.

  • अगर आप Public Cloud के ग्राहक के लिए Apigee Edge हैं, तो features.allowExtensionsInPostClientFlow फ़्लैग, डिफ़ॉल्ट रूप से true पर सेट है.

  • अगर आप Private Cloud के ग्राहक के लिए Apigee Edge हैं, तो संगठन की प्रॉपर्टी अपडेट करना एपीआई features.allowExtensionsInPostClientFlow फ़्लैग को true पर सेट करने के लिए.

PostClientFlow से MessageLogging नीति को कॉल करने पर सभी पाबंदियां एक्सटेंशन की नीति पर भी लागू होता है. ज़्यादा जानकारी के लिए, इस्तेमाल से जुड़ी जानकारी देखें.

एलिमेंट का रेफ़रंस

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="false" enabled="true" name="Extension-Callout-1">
    <DisplayName/>
    <Connector/>
    <Action/>
    <Input/>
    <Output/>
</ConnectorCallout>

&lt;ConnectorCallout&gt; एट्रिब्यूट

<ConnectorCallout name="Extension-Callout-1" continueOnError="false" enabled="true" async="false">

यहां दी गई टेबल में, ऐसे एट्रिब्यूट के बारे में बताया गया है जो नीति के सभी पैरंट एलिमेंट में एक जैसे होते हैं:

एट्रिब्यूट ब्यौरा डिफ़ॉल्ट मौजूदगी
name

नीति का अंदरूनी नाम. name एट्रिब्यूट की वैल्यू ये काम कर सकती है: अक्षरों, संख्याओं, स्पेस, हाइफ़न, अंडरस्कोर, और फ़ुलस्टॉप को शामिल करें. यह मान नहीं हो सकता 255 वर्णों से ज़्यादा होने चाहिए.

इसके अलावा, नीति को लेबल करने के लिए, <DisplayName> एलिमेंट का इस्तेमाल करें प्रबंधन यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर को अलग, आम भाषा में इस्तेमाल करने वाले नाम के साथ किया जा सकता है.

लागू नहीं ज़रूरी है
continueOnError

किसी नीति के काम न करने पर, गड़बड़ी दिखाने के लिए false पर सेट करें. यह उम्मीद है व्यवहार की जानकारी देने वाला डेटा.

नीति के लागू होने के बाद भी फ़्लो को एक्ज़ीक्यूट करने के लिए, इसे true पर सेट करें विफल होता है.

गलत वैकल्पिक
enabled

नीति को लागू करने के लिए, true पर सेट करें.

नीति को बंद करने के लिए, false पर सेट करें. नीति लागू किया जाता है, भले ही वह किसी फ़्लो से जुड़ा रहता हो.

सही वैकल्पिक
async

यह एट्रिब्यूट अब काम नहीं करता.

गलत बहिष्कृत

&lt;DisplayName&gt; एलिमेंट

इस कॉलम में नीति को लेबल करने के लिए, name एट्रिब्यूट के साथ-साथ इस्तेमाल करें मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर, जिसका नाम अलग और सामान्य भाषा में है.

<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट

लागू नहीं

अगर आप इस एलिमेंट को छोड़ देते हैं, तो नीति की name एट्रिब्यूट की वैल्यू यह होगी इस्तेमाल किया गया.

मौजूदगी वैकल्पिक
टाइप स्ट्रिंग

&lt;Action&gt; एलिमेंट

एक्सटेंशन के ज़रिए दिखाई गई वह कार्रवाई जिसे नीति लागू करना चाहिए.

<Action>action-exposed-by-extension</Action>
डिफ़ॉल्ट कोई नहीं
मौजूदगी ज़रूरी है
टाइप स्ट्रिंग

हर एक्सटेंशन, कार्रवाइयों का अपना सेट दिखाता है, जो एक्सटेंशन के ज़रिए दिखाए जाने वाले संसाधन की सुविधाओं का ऐक्सेस देता है. फ़ंक्शन के आर्ग्युमेंट की जानकारी देने के लिए, <Input> एलिमेंट के कॉन्टेंट का इस्तेमाल करके, किसी कार्रवाई को इस नीति के साथ कॉल किया जाने वाला फ़ंक्शन माना जा सकता है. कार्रवाई का रिस्पॉन्स, <Output> एलिमेंट के साथ तय किए गए वैरिएबल में सेव होता है.

एक्सटेंशन के फ़ंक्शन की सूची देखने के लिए, इस नीति की मदद से जिस एक्सटेंशन को कॉल किया जा रहा है उसका रेफ़रंस देखें.

<कनेक्टर> एलिमेंट

इस्तेमाल करने के लिए, कॉन्फ़िगर किए गए एक्सटेंशन का नाम. यह एनवायरमेंट के स्कोप वाला नाम है. इसे किसी एनवायरमेंट में डिप्लॉयमेंट के लिए कॉन्फ़िगर करते समय, एक्सटेंशन दिया गया था.

<Connector>name-of-configured-extension</Connector>

डिफ़ॉल्ट कोई नहीं
मौजूदगी ज़रूरी है
टाइप स्ट्रिंग

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

&lt;Input&gt; एलिमेंट

JSON में, जिस हिस्से में एक्सटेंशन को भेजने के लिए अनुरोध का मुख्य हिस्सा मौजूद है.

<Input><![CDATA[ JSON-containing-input-values ]]></Input>

डिफ़ॉल्ट कोई नहीं
मौजूदगी एक्सटेंशन के आधार पर, यह ज़रूरी नहीं है या ज़रूरी नहीं है.
टाइप स्ट्रिंग

यह उस कार्रवाई का आर्ग्युमेंट है जिसे आपने <Action> एलिमेंट के साथ तय किया है. <Input> एलिमेंट की वैल्यू, इस्तेमाल किए जा रहे एक्सटेंशन और कार्रवाई के आधार पर अलग-अलग होगी. हर ऐक्शन की प्रॉपर्टी के बारे में जानने के लिए, एक्सटेंशन पैकेज का दस्तावेज़ देखें.

ध्यान दें कि कई <Input> एलिमेंट वैल्यू, <![CDATA[]]> सेक्शन के अंदर शामिल किए बिना सही तरीके से काम करेंगी. हालांकि, JSON के नियमों के तहत, उन वैल्यू को शामिल किया जा सकता है जो एक्सएमएल के तौर पर पार्स नहीं होंगी. सबसे सही तरीका यह है कि रनटाइम पार्स की गड़बड़ियों से बचने के लिए, JSON को CDATA सेक्शन के तौर पर बंद करें.

<Input> एलिमेंट की वैल्यू, सही तरीके से बनाई गई JSON होती है जिसकी प्रॉपर्टी में वैल्यू के बारे में बताया जाता है शुरू करने के लिए एक्सटेंशन कार्रवाई भेजें. उदाहरण के लिए, Google Cloud का लॉगिंग एक्सटेंशन एक्सटेंशन की log कार्रवाई, (logName) पर लिखने के लिए लॉग को तय करने वाली वैल्यू लेती है, एंट्री (metadata) और लॉग मैसेज (data) के साथ शामिल करने के लिए मेटाडेटा. यहां एक उदाहरण दिया गया है:

<Input><![CDATA[{
    "logName" : "example-log",
    "metadata" : {
        "resource": {
            "type": "global",
            "labels": {
                "project_id": "my-test"
            }
        }
    },
    "message" : "This is a test"
}]]></Input>

<Input> JSON में फ़्लो वैरिएबल का इस्तेमाल करना

<Input> के कॉन्टेंट को मैसेज का टेंप्लेट. इसका मतलब है कि कर्ली ब्रैकेट में रैप किए गए वैरिएबल का नाम, रनटाइम के दौरान रेफ़र किए गए वैरिएबल की वैल्यू से बदल दिया जाएगा.

उदाहरण के लिए, client.ip फ़्लो वैरिएबल का इस्तेमाल करके एपीआई प्रॉक्सी को कॉल करने वाले क्लाइंट का आईपी पता पाने के लिए, पिछले <Input> ब्लॉक को फिर से लिखा जा सकता है:

<Input><![CDATA[{
    "logName" : "example-log",
    "metadata" : {
        "resource": {
            "type": "global",
            "labels": {
                "project_id": "my-test"
            }
        }
    },
    "message" : "{client.ip}"
}]]></Input>

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

नीचे दिए गए <Input> उदाहरण में दो फ़्लो वैरिएबल रेफ़रंस शामिल हैं:

<Input><![CDATA[{
  "logName" : "example-log",
  "metadata" : {my.log.entry.metadata},
  "message" : "{client.ip}"
}]]></Input>

रनटाइम के दौरान, JSON प्रॉपर्टी की वैल्यू इस तरह से हल हो जाएंगी:

  • logName प्रॉपर्टी की वैल्यू -- स्ट्रिंग लिटरल example-log.
  • metadata प्रॉपर्टी की वैल्यू -- कोटेशन मार्क को बंद किए बिना my.log.entry.metadata फ़्लो वैरिएबल की वैल्यू. यह तब काम का हो सकता है, जब वैरिएबल की वैल्यू खुद किसी ऑब्जेक्ट को दिखाने वाला JSON हो.
  • message प्रॉपर्टी की वैल्यू -- client.ip फ़्लो वैरिएबल की वैल्यू, कोटेशन मार्क के अंदर .

&lt;Output&gt; एलिमेंट

उस वैरिएबल का नाम जिसमें एक्सटेंशन से जुड़ी कार्रवाई का रिस्पॉन्स सेव किया जाता है.

<Output>variable-name</Output> <!-- The JSON object inside the variable is parsed -->

या

<Output parsed="false">variable-name</Output>  <!-- The JSON object inside the variable is raw, unparsed -->

डिफ़ॉल्ट कोई नहीं
मौजूदगी एक्सटेंशन के आधार पर, यह ज़रूरी नहीं है या ज़रूरी नहीं है.
टाइप parsed एट्रिब्यूट की सेटिंग के आधार पर पार्स किया गया ऑब्जेक्ट या स्ट्रिंग.

रिस्पॉन्स मिलने पर, रिस्पॉन्स की वैल्यू को आपके बताए गए वैरिएबल में रखा जाता है. यहां से इसे अन्य एपीआई प्रॉक्सी कोड से ऐक्सेस किया जा सकता है.

एक्सटेंशन रिस्पॉन्स ऑब्जेक्ट, JSON फ़ॉर्मैट में होते हैं. यह नीति, JSON को कैसे मैनेज करती है, इसके लिए दो विकल्प हैं:

  • पार्स किया गया (डिफ़ॉल्ट): यह नीति, JSON ऑब्जेक्ट को पार्स करती है और JSON डेटा के साथ वैरिएबल अपने-आप जनरेट करती है. उदाहरण के लिए, अगर JSON में "messageId" : 12345; है और आउटपुट वैरिएबल को extensionOutput नाम दिया जाता है, तो {extensionOutput.messageId} वैरिएबल का इस्तेमाल करके, दूसरी नीतियों में उस मैसेज आईडी को ऐक्सेस किया जा सकता है.
  • पार्स नहीं किया गया: आउटपुट वैरिएबल में एक्सटेंशन से मिला, बिना पार्स किया गया JSON रिस्पॉन्स शामिल होता है. (अगर आप चाहें, तो JavaScript नीति का इस्तेमाल करके अब भी रिस्पॉन्स वैल्यू को एक अलग चरण में पार्स किया जा सकता है.)

&lt;Output&gt; विशेषताएं

एट्रिब्यूट ब्यौरा डिफ़ॉल्ट मौजूदगी
पार्स किया गया यह एक्सटेंशन से मिले JSON ऑब्जेक्ट को पार्स करता है. इससे JSON ऑब्जेक्ट में मौजूद डेटा को, दूसरी नीतियों के मुताबिक वैरिएबल के तौर पर ऐक्सेस किया जा सकता है. सही वैकल्पिक

फ़्लो वैरिएबल

कोई नहीं.

गड़बड़ी कोड

Apigee Edge की नीतियों से मिलने वाली गड़बड़ियां, नीति से जुड़ी गड़बड़ी के रेफ़रंस में बताए गए तरीके से एक जैसे फ़ॉर्मैट में होती हैं.

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

रनटाइम से जुड़ी गड़बड़ियां

नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.

गड़बड़ी का नाम एचटीटीपी कोड स्थिति वजह
एक्ज़ीक्यूशन नहीं हो सका 500 एक्सटेंशन गड़बड़ी के साथ जवाब देता है.

डिप्लॉयमेंट से जुड़ी गड़बड़ियां

ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाला प्रॉक्सी डिप्लॉय किया जाता है.

गड़बड़ी का नाम कब होता है समाधान
InvalidConnectorInstance <Connector> एलिमेंट खाली है.
ConnectorInstanceDoesNotExists <Connector> एलिमेंट में बताया गया एक्सटेंशन, एनवायरमेंट में मौजूद नहीं है.
InvalidAction एक्सटेंशन कॉलआउट नीति में <Action> एलिमेंट मौजूद नहीं है या उसकी वैल्यू खाली है.
AllowExtensionsInPostClientFlow पोस्ट क्लाइंट फ़्लो में ExtensionCallout नीति का इस्तेमाल नहीं किया जा सकता है.