आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
क्या
AssignMessage नीति, एपीआई प्रॉक्सी फ़्लो के दौरान नए अनुरोध और जवाब वाले मैसेज बनाती है या उनमें बदलाव करती है. इस नीति के तहत, इन मैसेज पर ये कार्रवाइयां की जा सकती हैं:
- किसी मैसेज में नए फ़ॉर्म पैरामीटर, हेडर या क्वेरी पैरामीटर जोड़ना
- एक मैसेज से दूसरी मैसेज में मौजूदा प्रॉपर्टी कॉपी करना
- किसी मैसेज से हेडर, क्वेरी पैरामीटर, फ़ॉर्म पैरामीटर, और/या मैसेज पेलोड हटाएं
- किसी मैसेज में मौजूद प्रॉपर्टी की वैल्यू सेट करना
AssignMessage नीति की मदद से, आम तौर पर अनुरोध या जवाब की प्रॉपर्टी जोड़ी, बदली या हटाई जाती हैं. हालांकि, AssignMessage नीति का इस्तेमाल करके, कस्टम अनुरोध या जवाब का मैसेज बनाया जा सकता है. साथ ही, इसे किसी अन्य टारगेट को भेजा जा सकता है. इसके बारे में कस्टम अनुरोध के मैसेज बनाना लेख में बताया गया है.
AssignMessage नीति, मैसेज या फ़्लो वैरिएबल बना सकती है या उनमें बदलाव कर सकती है. इस नीति का इस्तेमाल, अनुरोध के मैसेज में बदलाव करने के लिए किया जाता है. इसके बाद, इन मैसेज को प्रॉक्सी के ज़रिए अपस्ट्रीम सिस्टम को भेजा जाता है. इसके अलावा, इस नीति का इस्तेमाल, जवाब के मैसेज में बदलाव करने के लिए भी किया जाता है. इसके बाद, इन मैसेज को एपीआई का इस्तेमाल करने वाले ऐप्लिकेशन को भेजा जाता है.
<AssignMessage>
एलिमेंट
AssignMessage नीति के बारे में बताता है.
डिफ़ॉल्ट वैल्यू | नीचे दिया गया डिफ़ॉल्ट नीति टैब देखें |
ज़रूरी है? | ज़रूरी है |
समस्या | कॉम्प्लेक्स ऑब्जेक्ट |
पैरंट एलिमेंट | लागू नहीं |
चाइल्ड एलिमेंट |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
<AssignMessage>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All AssignMessage child elements are optional --> <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>[false|true]</ReasonPhrase> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>policy_display_name</DisplayName> <IgnoreUnresolvedVariables>[true|false] </IgnoreUnresolvedVariables> <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
डिफ़ॉल्ट नीति
यहां दिए गए उदाहरण में, Edge के यूज़र इंटरफ़ेस (यूआई) में अपने फ़्लो में AssignMessage नीति जोड़ने पर, डिफ़ॉल्ट सेटिंग दिखाई गई हैं:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <ReasonPhrase/> <Path/> </Copy> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> <Payload/> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <AssignVariable> <Name>name</Name> <Value/> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Edge यूज़र इंटरफ़ेस (यूआई) में नई AssignMessage नीति डालने पर, टेंप्लेट में सभी संभावित कार्रवाइयों के लिए स्टब शामिल होते हैं. आम तौर पर, आपको यह चुनना होता है कि इस नीति के साथ कौनसी कार्रवाइयां करनी हैं. साथ ही, आपको बाकी चाइल्ड एलिमेंट हटाने होते हैं. उदाहरण के लिए, अगर आपको कॉपी करने की कार्रवाई करनी है, तो <Copy>
एलिमेंट का इस्तेमाल करें. साथ ही, नीति को ज़्यादा आसानी से पढ़ने लायक बनाने के लिए, <Add>
, <Remove>
, और अन्य चाइल्ड एलिमेंट हटाएं.
इस एलिमेंट में ये एट्रिब्यूट शामिल होते हैं, जो सभी नीतियों में शामिल हैं:
एट्रिब्यूट | डिफ़ॉल्ट | ज़रूरी है? | ब्यौरा |
---|---|---|---|
name |
लागू नहीं | ज़रूरी |
नीति का अंदरूनी नाम. इसके अलावा, मैनेजमेंट एलिमेंट के यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में, नीति एलिमेंट को किसी अलग नाम से इस्तेमाल करने के लिए, |
continueOnError |
गलत | ज़रूरी नहीं | नीति के काम न करने पर गड़बड़ी दिखाने के लिए, "गलत" पर सेट करें. ज़्यादातर नीतियों के लिए इस तरीके का इस्तेमाल किया जाना चाहिए. नीति लागू न होने के बाद भी फ़्लो चलाने के लिए, "सही" पर सेट करें. |
enabled |
सही | ज़रूरी नहीं | नीति लागू करने के लिए, "सही" पर सेट करें. नीति को "बंद" करने के लिए "गलत" पर सेट करें. अगर नीति किसी फ़्लो से जुड़ी हुई हो, तो भी उसे लागू नहीं किया जाएगा. |
async |
गलत | बहिष्कृत | इस एट्रिब्यूट के इस्तेमाल पर रोक लगा दी गई है. |
यहां दी गई टेबल में, <AssignMessage>
के चाइल्ड एलिमेंट के बारे में खास जानकारी दी गई है:
चाइल्ड एलिमेंट | ज़रूरी है? | ब्यौरा |
---|---|---|
सामान्य कार्रवाइयां | ||
<Add> |
वैकल्पिक | यह को मैसेज ऑब्जेक्ट में जानकारी जोड़ता है. यह ऑब्जेक्ट, <AssignTo> एलिमेंट से तय होता है.
|
<Copy> |
वैकल्पिक | यह एट्रिब्यूट, source एट्रिब्यूट से तय किए गए मैसेज से, <AssignTo> एलिमेंट से तय किए गए मैसेज ऑब्जेक्ट तक जानकारी कॉपी करता है. |
<Remove> |
वैकल्पिक | यह फ़ंक्शन, <AssignTo> एलिमेंट में दिए गए मैसेज वैरिएबल से, तय किए गए एलिमेंट मिटाता है. |
<Set> |
वैकल्पिक | यह अनुरोध या जवाब में मौजूद प्रॉपर्टी की वैल्यू बदलता है. यह वैल्यू, <AssignTo> एलिमेंट से तय की जाती है.
|
अन्य चाइल्ड एलिमेंट | ||
<AssignTo> |
वैकल्पिक | यह तय करता है कि AssignMessage नीति किस मैसेज पर लागू होगी. यह स्टैंडर्ड अनुरोध या जवाब हो सकता है. इसके अलावा, यह कोई नया, कस्टम मैसेज भी हो सकता है. |
<AssignVariable> |
वैकल्पिक | यह फ़्लो वैरिएबल को वैल्यू असाइन करता है. अगर वैरिएबल मौजूद नहीं है, तो <AssignVariable> उसे बनाता है. |
<IgnoreUnresolvedVariables> |
वैकल्पिक | यह कुकी तय करती है कि किसी ऐसे वैरिएबल का सामना होने पर प्रोसेसिंग बंद हो जाएगी या नहीं जिसे हल नहीं किया जा सका है. |
इनमें से हर चाइल्ड एलिमेंट के बारे में, यहां दिए गए सेक्शन में बताया गया है.
उदाहरण
यहां AssignMessage नीति को इस्तेमाल करने के कुछ उदाहरण दिए गए हैं:
1: हेडर जोड़ें
इस उदाहरण में, <Add>
एलिमेंट का इस्तेमाल करके, अनुरोध में हेडर जोड़ा गया है:
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
2: पेलोड हटाना
यहां दिए गए उदाहरण में, <Remove>
एलिमेंट की मदद से, रिस्पॉन्स से पेलोड को मिटाया गया है:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
3: जवाब में बदलाव करना
इस उदाहरण में, मौजूदा रिस्पॉन्स ऑब्जेक्ट में हेडर जोड़कर उसे बदला गया है:
<AssignMessage name="AM-modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false </IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
इस उदाहरण से नया मैसेज नहीं बनता. इसके बजाय, यह एचटीटीपी हेडर जोड़कर, मौजूदा रिस्पॉन्स मैसेज में बदलाव करता है.
इस उदाहरण में, <AssignTo>
एलिमेंट में वैरिएबल का नाम response
के तौर पर तय किया गया है. इसलिए, यह नीति उस रिस्पॉन्स ऑब्जेक्ट में बदलाव करती है जिसे टारगेट सर्वर से मिले डेटा के साथ सेट किया गया था.
इस नीति के तहत, रिस्पॉन्स मैसेज में जोड़ा गया एचटीटीपी हेडर, LookupCache नीति से मिले वैरिएबल से लिया गया है. इसलिए, Assign Message नीति के ज़रिए बदले गए रिस्पॉन्स मैसेज में एक एचटीटीपी हेडर होता है. इससे पता चलता है कि नतीजे कैश मेमोरी से लिए गए हैं या नहीं. रिस्पॉन्स में हेडर सेट करने से, डीबग करने और समस्या हल करने में मदद मिल सकती है.
4: डाइनैमिक कॉन्टेंट सेट करना
Assign Message का इस्तेमाल, रिस्पॉन्स और अनुरोध के मैसेज के पेलोड में डाइनैमिक कॉन्टेंट एम्बेड करने के लिए किया जा सकता है.
किसी एक्सएमएल पेलोड में Edge फ़्लो वैरिएबल एम्बेड करने के लिए, वैरिएबल को कर्ली ब्रैकेट में रैप करें. जैसे: {prefix.name}
.
यहां दिए गए उदाहरण में, user-agent
एचटीटीपी हेडर फ़्लो वैरिएबल की वैल्यू को User-agent
नाम के एक्सएमएल एलिमेंट में एम्बेड किया गया है:
<AssignMessage name="AM-set-dynamic-content"> <AssignTo>response</AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false </IgnoreUnresolvedVariables> </AssignMessage>
JSON पेलोड के लिए, variablePrefix
और variableSuffix
एट्रिब्यूट का इस्तेमाल करके वैरिएबल डाले जा सकते हैं. साथ ही, सीमांकक वर्णों का इस्तेमाल किया जा सकता है. इसका उदाहरण यहां दिया गया है:
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
फ़्लो वैरिएबल की पूरी सूची देखने के लिए, फ़्लो वैरिएबल का रेफ़रंस देखें.
क्लाउड रिलीज़ 16.08.17 से, वैरिएबल डालने के लिए कर्ली ब्रेसिज़ का भी इस्तेमाल किया जा सकता है.
5: क्वेरी पैरामीटर हटाएं
यहां दिए गए उदाहरण में, अनुरोध से apikey
क्वेरी पैरामीटर को हटाया गया है:
<AssignMessage name="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
उपयोगकर्ता की पुष्टि करने के लिए, VerifyAPIKey नीति का इस्तेमाल करते समय, अनुरोध के मैसेज से apikey
क्वेरी पैरामीटर हटाना सबसे सही तरीका है. ऐसा इसलिए किया जाता है, ताकि संवेदनशील मुख्य जानकारी को बैकएंड टारगेट तक पहुंचने से रोका जा सके.
6: वैरिएबल सेट/पाना
इस उदाहरण में, Assign Message की तीन नीतियों का इस्तेमाल किया गया है:
- यह अनुरोध में तीन फ़्लो वैरिएबल बनाता है. इनकी वैल्यू स्टैटिक होती हैं
- अनुरोध फ़्लो में दूसरी नीति में फ़्लो वैरिएबल को डाइनैमिक तरीके से सेट करता है
- यह कुकी, रिस्पॉन्स के पेलोड में सेट होती है
<!-- Policy #1: Set variables in the request --> <AssignMessage name="AM-set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> </AssignMessage>
पहली नीति में, <AssignVariable>
एलिमेंट, अनुरोध में तीन वैरिएबल बनाता है और उन्हें सेट करता है. हर <Name>
एलिमेंट, वैरिएबल का नाम तय करता है. वहीं, <Value>
वैल्यू तय करता है.
दूसरी नीति, वैल्यू को पढ़ने के लिए <AssignVariable>
एलिमेंट का इस्तेमाल करती है. साथ ही, तीन नए वैरिएबल बनाती है:
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
दूसरी नीति में, <Ref>
एलिमेंट, सोर्स वैरिएबल का रेफ़रंस देता है. साथ ही, <Name>
एलिमेंट, नए वैरिएबल के नाम तय करते हैं. अगर <Ref>
एलिमेंट से रेफ़र किया गया वैरिएबल ऐक्सेस नहीं किया जा सकता, तो <Value>
एलिमेंट से तय की गई वैल्यू का इस्तेमाल किया जा सकता है.
नीतियों के इस सेट को आज़माने के लिए:
- अनुरोध फ़्लो में नीतियां #1 और #2 जोड़ें. नीति #1 को नीति #2 से पहले रखना न भूलें.
- जवाब के फ़्लो में तीसरी नीति जोड़ें.
- तीसरी नीति में, जवाब में वैरिएबल जोड़ने के लिए
<Set>
एलिमेंट का इस्तेमाल किया जाता है. यहां दिए गए उदाहरण में, रिस्पॉन्स में एक एक्सएमएल पेलोड बनाया गया है. यह पेलोड, Edge क्लाइंट को वापस भेजता है:<!-- Policy #3: Add variables to the response --> <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload"> <DisplayName>put-em-in-the-payload</DisplayName> <Set> <Payload contentType="application/xml"> <wrapper> <secret>{secret}</secret> <config> <environment>{environment}</environment> <protocol>{protocol}</protocol> </config> </wrapper> </Payload> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
ध्यान दें कि
<Set>
में फ़्लो वैरिएबल को ऐक्सेस करने का सिंटैक्स, उन्हें कर्ली ब्रैकेट में रैप करना है.<Payload>
एलिमेंट केcontentType
एट्रिब्यूट को "application/xml" पर सेट करना न भूलें. - अपनी एपीआई प्रॉक्सी को एक अनुरोध भेजें. उदाहरण के लिए:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
इसके अलावा, नतीजों को
xmllint
जैसी किसी यूटिलिटी के ज़रिए पाइप किया जा सकता है, ताकि एक्सएमएल को अच्छी तरह से फ़ॉर्मैट किए गए स्ट्रक्चर में दिखाया जा सके:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
जवाब का मुख्य हिस्सा कुछ ऐसा दिखना चाहिए:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7: सेवा कॉलआउट के रिस्पॉन्स हेडर पाना
यहां दिए गए उदाहरण में, मान लें कि एपीआई प्रॉक्सी अनुरोध में ServiceCallout नीति है. साथ ही, कॉलआउट रिस्पॉन्स में एक ही नाम (Set-Cookie
) के कई हेडर शामिल हैं. मान लें कि ServiceCallout के रिस्पॉन्स वैरिएबल की डिफ़ॉल्ट वैल्यू calloutResponse
है. ऐसे में, यहां दी गई नीति को दूसरे Set-Cookie
हेडर की वैल्यू मिलेगी.
<AssignMessage name="AM-Payload-from-SC-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
सभी हेडर वैल्यू की सूची बनाने के लिए, इस वैरिएबल का इस्तेमाल करें:
{calloutResponse.header.Set-Cookie.values}
इस रेफ़रंस में मौजूद हर चाइल्ड एलिमेंट में अन्य उदाहरण दिए गए हैं. ज़्यादा उदाहरणों के लिए, GitHub पर AssignMessage का उदाहरण देखें.
चाइल्ड एलिमेंट का रेफ़रंस
इस सेक्शन में, <AssignMessage>
के चाइल्ड एलिमेंट के बारे में बताया गया है.
<Add>
यह अनुरोध या जवाब में ऐसी जानकारी जोड़ता है जिसे <AssignTo>
एलिमेंट से तय किया जाता है.
<Add>
एलिमेंट, मैसेज में ऐसी नई प्रॉपर्टी जोड़ता है जो मूल मैसेज में मौजूद नहीं हैं. मौजूदा प्रॉपर्टी की वैल्यू बदलने के लिए, <Set>
एलिमेंट का इस्तेमाल करें.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | कॉम्प्लेक्स टाइप |
पैरंट एलिमेंट |
<AssignMessage>
|
चाइल्ड एलिमेंट |
<FormParams> <Headers> <QueryParams> |
<Add>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
पहला उदाहरण
यहां दिए गए उदाहरण में, <FormParams>
एलिमेंट का इस्तेमाल किया गया है. इससे शुरुआती अनुरोध से तीन क्वेरी स्ट्रिंग पैरामीटर की वैल्यू मिलती हैं. साथ ही, इन्हें टारगेट एंडपॉइंट अनुरोध पर फ़ॉर्म पैरामीटर के तौर पर सेट किया जाता है:
<AssignMessage name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
दूसरा उदाहरण
इस उदाहरण में, <Headers>
एलिमेंट का इस्तेमाल करके, टारगेट एंडपॉइंट को भेजे जाने वाले अनुरोध में partner-id
हेडर जोड़ा गया है:
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
उदाहरण 3
इस उदाहरण में, अनुरोध में स्टैटिक वैल्यू के साथ एक क्वेरी पैरामीटर जोड़ने के लिए, <QueryParams>
एलिमेंट का इस्तेमाल किया गया है:
<AssignMessage name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
इस उदाहरण में, अनुरोध के प्रीफ़्लो में <Add>
का इस्तेमाल किया गया है. अगर ट्रेस टूल जैसे किसी टूल में नतीजों को देखा जाता है, तो https://example-target.com/get
का अनुरोध https://example-target.com/get?myParam=42
बन जाता है.
<Add>
के चाइल्ड एलिमेंट में, डाइनैमिक स्ट्रिंग सब्स्टिट्यूशन की सुविधा काम करती है. इसे मैसेज टेंप्लेटिंग कहा जाता है.
<FormParams>
(<Add>
का बच्चा)
अनुरोध के मैसेज में नए फ़ॉर्म पैरामीटर जोड़ता है. इस एलिमेंट का जवाब वाले मैसेज पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <FormParam> एलिमेंट का कलेक्शन |
पैरंट एलिमेंट |
<Add>
|
चाइल्ड एलिमेंट |
<FormParam> |
<FormParams>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </Add> </AssignMessage>
उदाहरण 1
इस उदाहरण में, अनुरोध में एक फ़ॉर्म पैरामीटर ("answer") और एक स्टैटिक वैल्यू ("42") जोड़ी गई है:
<AssignMessage name="AM-add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
उदाहरण 2
यहां दिए गए उदाहरण में, name
क्वेरी पैरामीटर की वैल्यू मिलती है. साथ ही, इसे फ़ॉर्म पैरामीटर के तौर पर अनुरोध में जोड़ा जाता है. इसके बाद, क्वेरी पैरामीटर को हटा दिया जाता है:
<AssignMessage name="AM-Swap-QueryParam-to-FormParams"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> <Remove> <QueryParam name="name"/> </Remove> </AssignMessage>
ध्यान दें कि इस उदाहरण में, <AssignTo>
के साथ टारगेट तय नहीं किया गया है. यह नीति, अनुरोध में सिर्फ़ पैरामीटर जोड़ती है.
उदाहरण 3
यहां दिए गए उदाहरण में, अनुरोध में कई फ़ॉर्म पैरामीटर जोड़े गए हैं:
<AssignMessage name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
इस उदाहरण में, ऑरिजिनल अनुरोध से क्वेरी स्ट्रिंग पैरामीटर मिलते हैं और उन्हें अलग-अलग नामों वाले फ़ॉर्म पैरामीटर के तौर पर जोड़ा जाता है. इसके बाद, यह ओरिजनल क्वेरी पैरामीटर हटा देता है. Apigee, बदले गए अनुरोध को टारगेट एंडपॉइंट पर भेजेगा.
फ़्लो देखने के लिए, ट्रेस टूल का इस्तेमाल किया जा सकता है. आपको दिखेगा कि अनुरोध के मुख्य हिस्से में, यूआरएल के तौर पर कोड में बदला गया फ़ॉर्म डेटा शामिल है. इसे मूल रूप से क्वेरी स्ट्रिंग पैरामीटर के तौर पर पास किया गया था:
username=nick&zip_code=90210&default_language=en
<FormParams>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- एचटीटीपी वर्ब: POST
- मैसेज का टाइप: अनुरोध
- इनमें से कोई एक या दोनों:
- फ़ॉर्म डेटा: इसे किसी वैल्यू पर सेट किया जाता है या "" (खाली स्ट्रिंग) पर सेट किया जाता है. उदाहरण के लिए,
curl
के साथ, अपने अनुरोध में-d ""
जोड़ें. Content-Length
हेडर: इसे 0 पर सेट करें. ऐसा तब करें, जब ओरिजनल अनुरोध में कोई डेटा न हो. अगर ऐसा नहीं है, तो इसे मौजूदा लंबाई (बाइट में) पर सेट करें. उदाहरण के लिए,curl
के साथ अपने अनुरोध में-H "Content-Length: 0"
जोड़ें.
- फ़ॉर्म डेटा: इसे किसी वैल्यू पर सेट किया जाता है या "" (खाली स्ट्रिंग) पर सेट किया जाता है. उदाहरण के लिए,
उदाहरण के लिए:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
<FormParams>
जोड़ने पर, Edge अनुरोध के Content-Type
हेडर को "application/x-www-form-urlencoded" पर सेट करता है. इसके बाद, मैसेज को टारगेट सेवा पर भेजता है.
<Headers>
(<Add>
का बच्चा)
यह फ़िल्टर, <AssignTo>
एलिमेंट में बताए गए अनुरोध या जवाब में नए हेडर जोड़ता है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <Header> एलिमेंट का कलेक्शन |
पैरंट एलिमेंट |
<Add>
|
चाइल्ड एलिमेंट |
<Header> |
<Headers>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Add> </AssignMessage>
उदाहरण 1
इस उदाहरण में, अनुरोध के मैसेज में partner-id
हेडर जोड़ा गया है. साथ ही, उस हेडर को verifyapikey.VAK-1.developer.app.partner-id
फ़्लो वैरिएबल की वैल्यू असाइन की गई है.
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams>
(<Add>
का बच्चा)
यह अनुरोध में नए क्वेरी पैरामीटर जोड़ता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <QueryParam> एलिमेंट का कलेक्शन |
पैरंट एलिमेंट |
<Add>
|
चाइल्ड एलिमेंट |
<QueryParam> |
<QueryParams>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
उदाहरण 1
यहां दिए गए उदाहरण में, अनुरोध में "myParam" क्वेरी पैरामीटर जोड़ा गया है और इसे "42" वैल्यू असाइन की गई है:
<AssignMessage name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- एचटीटीपी वर्ब: GET
- मैसेज का टाइप: अनुरोध
इसके अलावा, क्वेरी पैरामीटर सिर्फ़ तब सेट किए जा सकते हैं, जब <AssignTo>
एलिमेंट का type
एट्रिब्यूट, अनुरोध वाला मैसेज हो. जवाब में उन्हें सेट करने से कोई असर नहीं पड़ता.
अगर आपने अपनी नीति में क्वेरी पैरामीटर का खाली कलेक्शन (<Add><QueryParams/></Add>
) तय किया है, तो नीति कोई क्वेरी पैरामीटर नहीं जोड़ेगी. इसका मतलब है कि <QueryParams>
को शामिल नहीं किया गया है.
<AssignTo>
यह तय करता है कि AssignMessage नीति किस ऑब्जेक्ट पर लागू होती है. इसके विकल्प हैं:
- अनुरोध का मैसेज: एपीआई प्रॉक्सी को मिला
request
- जवाब वाला मैसेज: टारगेट सर्वर से मिला
response
- कस्टम मैसेज: कस्टम अनुरोध या जवाब ऑब्जेक्ट
ध्यान दें कि कुछ मामलों में, उस ऑब्जेक्ट को नहीं बदला जा सकता जिस पर AssignMessage नीति लागू होती है.
उदाहरण के लिए, जवाब में क्वेरी पैरामीटर (<QueryParams>
) या फ़ॉर्म पैरामीटर (<FormParams>
) जोड़ने या बदलने के लिए, <Add>
या <Set>
का इस्तेमाल नहीं किया जा सकता. अनुरोध पर, सिर्फ़ क्वेरी पैरामीटर और फ़ॉर्म पैरामीटर में बदलाव किया जा सकता है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग |
पैरंट एलिमेंट |
<AssignMessage>
|
चाइल्ड एलिमेंट | कोई नहीं |
अगर आपने <AssignTo>
तय नहीं किया है या <AssignTo>
एलिमेंट तय किया है, लेकिन एलिमेंट के लिए कोई टेक्स्ट वैल्यू तय नहीं की है, तो नीति डिफ़ॉल्ट अनुरोध या जवाब पर लागू होती है. यह इस बात पर निर्भर करता है कि नीति कहां लागू होती है. अगर नीति अनुरोध फ़्लो में लागू होती है, तो इसका असर अनुरोध के मैसेज पर पड़ता है. अगर यह जवाब देने की प्रोसेस में लागू होती है, तो नीति डिफ़ॉल्ट रूप से जवाब पर असर डालती है.
<AssignTo>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
उदाहरण 1
यहां दिए गए उदाहरण में बताया गया है कि टारगेट, वह ओरिजनल अनुरोध है जिसे टारगेट एंडपॉइंट पर भेजा जाएगा:
<AssignMessage name="assignto-1"> <!-- DO NOT do this --> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
दूसरा उदाहरण
नीचे दिए गए उदाहरण में, एक नया अनुरोध ऑब्जेक्ट बनाया गया है:
<AssignMessage name="AM-assignto-2"> <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> </AssignMessage>
नया अनुरोध या जवाब ऑब्जेक्ट बनाते समय, AssignMessage नीति के अन्य एलिमेंट (जैसे कि <Add>
, <Set>
, और <Copy>
) उस नए अनुरोध ऑब्जेक्ट पर काम करते हैं.
बाद में फ़्लो में, अन्य नीतियों में नए अनुरोध ऑब्जेक्ट को ऐक्सेस किया जा सकता है. इसके अलावा, ServiceCallout नीति के साथ नए अनुरोध ऑब्जेक्ट को किसी बाहरी सेवा पर भेजा जा सकता है.
उदाहरण 3
यहां दिए गए उदाहरण में, "MyRequestObject" नाम का एक नया अनुरोध ऑब्जेक्ट बनाया गया है:
<AssignMessage name="assign>to-<2" AssignTo createNew="true" transport=&"http" ty&pe="req>u<est"gt;My>RequestObjectlt;/AssignTo /AssignMessage
नया अनुरोध या जवाब ऑब्जेक्ट बनाते समय, AssignMessage नीति के अन्य एलिमेंट (जैसे कि <Add>
, <Set>
, और <Copy>
) उस नए अनुरोध ऑब्जेक्ट पर काम करते हैं.
बाद में फ़्लो में, अन्य नीतियों में नए अनुरोध ऑब्जेक्ट को ऐक्सेस किया जा सकता है. इसके अलावा, ServiceCallout नीति के साथ नए अनुरोध ऑब्जेक्ट को किसी बाहरी सेवा पर भेजा जा सकता है.
यहां दी गई टेबल में, <AssignTo>
एट्रिब्यूट के बारे में बताया गया है:
एट्रिब्यूट | ब्यौरा | ज़रूरी है? | टाइप |
---|---|---|---|
createNew |
इससे यह तय होता है कि वैल्यू असाइन करते समय, यह नीति नया मैसेज बनाती है या नहीं. अगर वैल्यू "true" है, तो नीति अगर "false" है, तो नीति इनमें से किसी एक तरीके से जवाब देती है:
अगर
|
वैकल्पिक | बूलियन |
transport |
अनुरोध या जवाब के मैसेज टाइप के लिए, परिवहन का टाइप तय करता है. डिफ़ॉल्ट वैल्यू "http" होती है. यह एकमात्र ऐसी वैल्यू है जिसका इस्तेमाल किया जा सकता है. |
वैकल्पिक | स्ट्रिंग |
type |
createNew "true" होने पर, यह नए मैसेज का टाइप तय करता है. मान्य वैल्यू "request" या "response" हैं.
इस एट्रिब्यूट को शामिल न करने पर, Edge एक अनुरोध या जवाब बनाता है. यह इस बात पर निर्भर करता है कि इस नीति को फ़्लो में कहां लागू किया गया है. |
वैकल्पिक | स्ट्रिंग |
<AssignVariable>
यह फ़्लो वैरिएबल को वैल्यू असाइन करता है. अगर फ़्लो वैरिएबल मौजूद नहीं है, तो
<AssignVariable>
इसे बनाता है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | कॉम्प्लेक्स टाइप |
पैरंट एलिमेंट |
<AssignMessage>
|
चाइल्ड एलिमेंट |
<Name> (ज़रूरी है)<Ref> <Template> <Value> |
फ़्लो वैरिएबल को असाइन की गई वैल्यू इनमें से कोई एक हो सकती है:
- लिटरल स्ट्रिंग: फ़्लो वैरिएबल के लिए लिटरल स्ट्रिंग वैल्यू तय करने के लिए,
<Value>
चाइल्ड एलिमेंट का इस्तेमाल करें. - फ़्लो वैरिएबल: डेस्टिनेशन फ़्लो वैरिएबल के लिए, मौजूदा फ़्लो वैरिएबल की वैल्यू तय करने के लिए,
<Ref>
चाइल्ड एलिमेंट का इस्तेमाल करें. सोर्स के तौर पर इस्तेमाल किए जा सकने वाले फ़्लो वैरिएबल की पूरी सूची देखने के लिए, फ़्लो वैरिएबल का रेफ़रंस देखें. - मैसेज टेंप्लेट: इंटरपोलेट करने के लिए,
<Template>
चाइल्ड एलिमेंट का इस्तेमाल करके मैसेज टेंप्लेट तय करें. इससे डेस्टिनेशन फ़्लो वैरिएबल में रखने के लिए वैल्यू मिलती है.
<AssignVariable>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble < >Namevariable_na<me/N>ame < Refso>urce_variable/Re<f Tem>platemessage<_template/Template or Te><mplate re>f=<9;tem>plate_variable<'/>Tem<plate Value>v<ariable_value/>Value /AssignVariable /AssignMessage
सोर्स वैरिएबल तय करने के लिए, <Ref>
एलिमेंट का इस्तेमाल करें. अगर <Ref>
से रेफ़र किया गया वैरिएबल ऐक्सेस नहीं किया जा सकता, तो Edge, <Value>
एलिमेंट से तय की गई वैल्यू का इस्तेमाल करता है. अगर आपने <Template>
को तय किया है, तो इसे अन्य चाइल्ड एलिमेंट के मुकाबले प्राथमिकता दी जाएगी.
उदाहरण 1
यहां दिए गए उदाहरण में, नए वैरिएबल myvar
की वैल्यू को लिटरल वैल्यू "42" पर सेट किया गया है:
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
दूसरा उदाहरण
यहां दिए गए उदाहरण में, फ़्लो वैरिएबल request.header.user-agent
की वैल्यू को डेस्टिनेशन फ़्लो वैरिएबल myvar
को असाइन किया गया है. साथ ही, क्वेरी पैरामीटर country
की वैल्यू को डेस्टिनेशन फ़्लो वैरिएबल Country
को असाइन किया गया है:
<AssignMessage name="assignvariab>le-<2" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-agen<t/Ref> ValueE<rrorOn>Cop<y/Value /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>ountr<y/Ref> ValueE<rrorOn>Cop<y/Value /Assi>g<nVariable /Ass>ignMessage
अगर दोनों में से कोई भी असाइनमेंट पूरा नहीं होता है, तो Edge, डेस्टिनेशन फ़्लो वैरिएबल को "ErrorOnCopy" वैल्यू असाइन करता है.
अगर myvar
या Country
फ़्लो वैरिएबल मौजूद नहीं हैं, तो <AssignVariable>
उन्हें बनाता है.
उदाहरण 3
यहां दिए गए उदाहरण में, <Template>
चाइल्ड एलिमेंट का इस्तेमाल किया गया है. इससे दो कॉन्टेक्स्ट वैरिएबल को
एक साथ जोड़ा जा सकता है. इनके बीच में लिटरल स्ट्रिंग (हाइफ़न) होती है:
<AssignMessage name='AV-via-templat>e-1<' IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue >Template{system.uuid}-{me<ssageid}/>Tem<plate /Assign>V<ariable /Assig>nMessage
<AssignVariable>
का इस्तेमाल आम तौर पर, क्वेरी पैरामीटर, हेडर या ऐसी अन्य वैल्यू के लिए डिफ़ॉल्ट वैल्यू सेट करने के लिए किया जाता है जिसे अनुरोध के साथ पास किया जा सकता है. इसके लिए, <Ref>
और <Value>
चाइल्ड एलिमेंट, दोनों का इस्तेमाल किया जाता है. ज़्यादा जानकारी के लिए, <Ref>
के उदाहरण देखें.
<Name>
(<AssignVariable>
का बच्चा)
यह डेस्टिनेशन फ़्लो वैरिएबल का नाम तय करता है. उदाहरण के लिए, वह वैरिएबल जिसकी वैल्यू AssignMessage नीति से सेट की जाती है. अगर <AssignVariable>
में दिया गया वैरिएबल मौजूद नहीं है, तो नीति उस नाम का वैरिएबल बना देती है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | ज़रूरी है |
समस्या | स्ट्रिंग |
पैरंट एलिमेंट |
<AssignVariable>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Name>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble< Namevariab>l<e_name/Name >/AssignVariable /AssignMessage
पहला उदाहरण
यहां दिए गए उदाहरण में, डेस्टिनेशन वैरिएबल को myvar
के तौर पर दिखाया गया है. साथ ही, इसे "42" के तौर पर सेट किया गया है:
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
अगर myvar
मौजूद नहीं है, तो <AssignVariable>
इसे बनाता है.
<Ref>
(<AssignVariable>
का बच्चा)
इस कुकी से, असाइनमेंट के सोर्स को फ़्लो वैरिएबल के तौर पर सेट किया जाता है. फ़्लो वैरिएबल, पहले से तय किए गए फ़्लो वैरिएबल में से कोई एक हो सकता है. इनकी सूची फ़्लो वैरिएबल के रेफ़रंस में दी गई है. इसके अलावा, यह आपके बनाए गए कस्टम फ़्लो वैरिएबल में से कोई एक भी हो सकता है.
<Ref>
की वैल्यू को हमेशा फ़्लो वैरिएबल के तौर पर देखा जाता है. वैल्यू के तौर पर, लिटरल स्ट्रिंग तय नहीं की जा सकती. लिटरल स्ट्रिंग वैल्यू असाइन करने के लिए, <Value>
एलिमेंट का इस्तेमाल करें.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग |
पैरंट एलिमेंट |
<AssignVariable>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Ref>
के साथ फ़्लो वैरिएबल तय करते समय, उन ब्रैकेट "{}" को शामिल न करें जिनका इस्तेमाल आम तौर पर फ़्लो वैरिएबल को रेफ़रंस देने के लिए किया जाता है. उदाहरण के लिए, client.host
फ़्लो वेरिएबल की वैल्यू को अपने नए वेरिएबल की वैल्यू के तौर पर सेट करने के लिए:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
डेस्टिनेशन फ़्लो वैरिएबल के लिए डिफ़ॉल्ट वैल्यू तय करने के लिए, <Value>
का इस्तेमाल <Ref>
के साथ करें. अगर <Ref>
से तय किया गया फ़्लो वैरिएबल मौजूद नहीं है, उसे पढ़ा नहीं जा सकता या वह शून्य है, तो Edge, डेस्टिनेशन फ़्लो वैरिएबल को <Value>
की वैल्यू असाइन करता है.
<Ref>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble < >Namevariable_na<me/N>ame< Refsource_>v<ariable/Ref >/AssignVariable /AssignMessage
उदाहरण 1
इस उदाहरण में, फ़्लो वैरिएबल request.header.user-agent
की वैल्यू को डेस्टिनेशन फ़्लो वैरिएबल myvar
को असाइन किया गया है. साथ ही, क्वेरी पैरामीटर country
की वैल्यू को Country
वैरिएबल को असाइन किया गया है:
<AssignMessage name="assignvariab>le-<4" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-ag<ent/Ref /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>oun<try/Ref /Assi>g<nVariable /Ass>ignMessage
इस उदाहरण में, Edge के पास किसी भी असाइनमेंट के लिए डिफ़ॉल्ट (या फ़ॉलबैक वैल्यू) तय नहीं की गई है.
उदाहरण 2
यहां दिए गए उदाहरण में, फ़्लो वैरिएबल request.header.user-agent
की वैल्यू को डेस्टिनेशन फ़्लो वैरिएबल myvar
को असाइन किया गया है. साथ ही, क्वेरी पैरामीटर country
की वैल्यू को Country
वैरिएबल को असाइन किया गया है:
<AssignMessage name="assignvariab>le-<2" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-agen<t/Ref> ValueE<rrorOn>Cop<y/Value /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>ountr<y/Ref> ValueE<rrorOn>Cop<y/Value /Assi>g<nVariable /Ass>ignMessage
इस उदाहरण में, अगर request.header.user-agent
फ़्लो वैरिएबल या Country
क्वेरी पैरामीटर की वैल्यू शून्य है, पढ़ी नहीं जा सकती या गलत तरीके से बनाई गई है, तो Edge नए वैरिएबल को "ErrorOnCopy" वैल्यू असाइन करता है.
उदाहरण 3
<AssignVariable>
का इस्तेमाल आम तौर पर, क्वेरी पैरामीटर, हेडर या अनुरोध के साथ पास की जा सकने वाली किसी अन्य वैल्यू की डिफ़ॉल्ट वैल्यू सेट करने के लिए किया जाता है. उदाहरण के लिए, आपने एक मौसम एपीआई प्रॉक्सी बनाई है. इसमें अनुरोध, "w" नाम का एक क्वेरी पैरामीटर लेता है. इस पैरामीटर में उस शहर का आईडी होता है जिसके लिए आपको मौसम की जानकारी चाहिए. अनुरोध किए गए यूआरएल का फ़ॉर्मैट यह है:
http://myCO.com/v1/weather/forecastrss?w=city_ID
"w" के लिए डिफ़ॉल्ट वैल्यू तय करने के लिए, AssignMessage नीति बनाएं. जैसे, यहां दी गई नीति:
<AssignMessage continueOnError="false" enabled="true" nam>e=&<quot;assignvariable-3" AssignTo createNew="fals>e&q<uot; transport="http>" <type="request"/ > I<gnoreUnresolve>dVari<able>strue /IgnoreUnres<olved>Varia<ble>s AssignVariable < N>amere<quest>.querypa<ram.w/>Nam<e Refreques>t<.queryparam.w/>Ref Value12797282/Value /AssignVariable /AssignMessage
इस उदाहरण में, <AssignVariable>
को request.queryparam.w
की वैल्यू मिलती है और यह वैल्यू <AssignVariable>
को असाइन की जाती है. अगर फ़्लो वैरिएबल null है, इसका मतलब है कि अनुरोध से "w" क्वेरी पैरामीटर को हटा दिया गया है, तो इस उदाहरण में <Value>
एलिमेंट की डिफ़ॉल्ट वैल्यू का इस्तेमाल किया जाता है. इसलिए, इस एपीआई प्रॉक्सी से ऐसा अनुरोध किया जा सकता है जिसमें "w" क्वेरी पैरामीटर शामिल न हो:
http://myCO.com/v1/weather/forecastrss
...और एपीआई प्रॉक्सी से अब भी मान्य नतीजा मिलता है.
<Value>
का इस्तेमाल करते समय, <Ref>
की वैल्यू एक फ़्लो वैरिएबल होनी चाहिए. जैसे, request
, response
या target
ऑब्जेक्ट की प्रॉपर्टी. वैल्यू, आपके बनाए गए कस्टम फ़्लो वैरिएबल की वैल्यू भी हो सकती है.
अगर आपने ऐसा फ़्लो वैरिएबल तय किया है जो <Ref>
की वैल्यू के लिए मौजूद नहीं है और <IgnoreUnresolvedVariables>
की वैल्यू "true" है, तो Edge एक गड़बड़ी दिखाता है.
<Template>
(<AssignVariable>
का बच्चा)
यह मैसेज टेंप्लेट के बारे में बताता है. मैसेज टेंप्लेट की मदद से, नीति लागू होने पर वैरिएबल स्ट्रिंग को बदला जा सकता है. साथ ही, इसमें लिटरल स्ट्रिंग को कर्ली ब्रेसिज़ में रैप किए गए वैरिएबल नामों के साथ जोड़ा जा सकता है. इसके अलावा, मैसेज टेंप्लेट में फ़ंक्शन इस्तेमाल किए जा सकते हैं. जैसे, एस्केपिंग और केस कन्वर्ज़न.
ref
एट्रिब्यूट का इस्तेमाल करके, फ़्लो वैरिएबल के बारे में बताएं. इस वैरिएबल की वैल्यू, मैसेज टेंप्लेट होती है. उदाहरण के लिए, किसी मैसेज टेंप्लेट को डेवलपर ऐप्लिकेशन पर कस्टम एट्रिब्यूट के तौर पर सेव किया जा सकता है. जब Edge, एपीआई कुंजी या सुरक्षा टोकन की पुष्टि करने के बाद डेवलपर ऐप्लिकेशन की पहचान करता है, तो <AssignVariable>
एलिमेंट, ऐप्लिकेशन के कस्टम एट्रिब्यूट से मैसेज टेंप्लेट का इस्तेमाल कर सकता है. यह सुरक्षा नीति से फ़्लो वैरिएबल के तौर पर उपलब्ध होता है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग |
पैरंट एलिमेंट |
<AssignVariable>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Template>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e" > AssignVariabl<e Tem>platemessage<_template/Template or Te><mplate re>f=&<#39;template_va>r<iable'/Tem>plate /AssignVariable /AssignMessage
उदाहरण 1
इस उदाहरण में, मैसेज टेंप्लेटिंग सिंटैक्स का इस्तेमाल करके, दो कॉन्टेक्स्ट वैरिएबल को एक साथ जोड़ा गया है. इनके बीच में लिटरल स्ट्रिंग (हाइफ़न) का इस्तेमाल किया गया है:
<AssignMessage name='AV-via-templat>e-1<' IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue >Template{system.uuid}-{me<ssageid}/>Tem<plate /Assign>V<ariable /Assig>nMessage
दूसरा उदाहरण
यहां फ़्लो वैरिएबल का एक उदाहरण दिया गया है. इसमें वैरिएबल की वैल्यू, पहले से तय किया गया मैसेज टेंप्लेट है. अगर आपको नीति में बदलाव किए बिना, रनटाइम पर पहले से तय किया गया टेंप्लेट डालना है, तो इस विकल्प का इस्तेमाल करें:
<AssignMessage name='AV-via-template-indirec>tly<39; IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue Template ref='my_templat>e_v<ariable'/ > </AssignVariabl>e /AssignMessage
उदाहरण 3
इस उदाहरण में, फ़्लो वैरिएबल और टेक्स्ट वैल्यू के बारे में बताया गया है. इस मामले में, अगर रेफ़र किया गया वैरिएबल शून्य नहीं है, तो उस वैल्यू का इस्तेमाल टेंप्लेट के तौर पर किया जाता है. अगर रेफ़र की गई वैल्यू शून्य है, तो टेक्स्ट वैल्यू (इस मामले में, {system.uuid}-{messageid}
) को टेंप्लेट के तौर पर इस्तेमाल किया जाता है. यह पैटर्न, "बदली गई" वैल्यू देने के लिए काम आता है. कुछ मामलों में, आपको डिफ़ॉल्ट टेंप्लेट (टेक्स्ट वाला हिस्सा) को ऐसी वैल्यू से बदलना होता है जो डाइनैमिक तौर पर सेट की जाती हैं. उदाहरण के लिए, शर्त के साथ इस्तेमाल किया जाने वाला कोई स्टेटमेंट, की-वैल्यू मैप से कोई वैल्यू ले सकता है और रेफ़रंस किए गए वैरिएबल को उस वैल्यू पर सेट कर सकता है:
<AssignMessage name='AV-template-with-fallb>ack<' IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables Assign>Varia<ble<>/span> Namemy_destination_<varia>ble/N<ame > Value<BADDBE>EF/Va<lue Template ref='>my_variable'{system.u<uid}-{mes>sag<eid}/Template > </AssignVariabl>e /AssignMessage
<Value>
(<AssignVariable>
का बच्चा)
यह <AssignVariable>
की मदद से सेट किए गए डेस्टिनेशन फ़्लो वैरिएबल की वैल्यू तय करता है. वैल्यू को हमेशा लिटरल स्ट्रिंग के तौर पर समझा जाता है. वैल्यू के तौर पर फ़्लो वैरिएबल का इस्तेमाल नहीं किया जा सकता. भले ही, आपने वैल्यू को ब्रैकेट ("{}") में रैप किया हो. फ़्लो वैरिएबल का इस्तेमाल करने के लिए, <Ref>
का इस्तेमाल करें.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग |
पैरंट एलिमेंट |
<AssignVariable>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Ref>
एलिमेंट के साथ इस्तेमाल करने पर, <Value>
डिफ़ॉल्ट (या फ़ॉलबैक) वैल्यू के तौर पर काम करता है. अगर <Ref>
की वैल्यू नहीं दी गई है, तय नहीं की जा सकती या शून्य है, तो <Value>
की वैल्यू का इस्तेमाल किया जाता है.
<Value>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="polic>y_nam<e&qu>ot; Assign<Varia>ble < Na>mevariable_nam<e/Name> < Valuevariable>_<value/Value >/AssignVariable /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, डेस्टिनेशन फ़्लो वैरिएबल myvar
की वैल्यू को लिटरल वैल्यू "42" पर सेट किया गया है:
<AssignMessage name="assignvariab>le-<1" Assi>gnVar<iabl>e < Name>myvar</Name> < Val>ue4<2/Value /Assi>g<nVariable /Ass>ignMessage
उदाहरण 2
इस उदाहरण में, फ़्लो वैरिएबल request.header.user-agent
की वैल्यू को फ़्लो वैरिएबल myvar
को असाइन किया गया है. साथ ही, क्वेरी पैरामीटर country
की वैल्यू को Country
वैरिएबल को असाइन किया गया है:
<AssignMessage name="assignvariab>le-<2" Assi>gnVar<iabl>e < Name>myvar</Na>me Refrequest.header.<user>-agen<t/Ref> ValueE<rrorOn>Cop<y/Value /Assi>gnV<ariable Assi>gnVar<iabl>e N<ameCo>untry</Na>me Refrequest.querypar<am.c>ountr<y/Ref> ValueE<rrorOn>Cop<y/Value /Assi>g<nVariable /Ass>ignMessage
अगर दोनों में से कोई भी असाइनमेंट पूरा नहीं होता है, तो <AssignVariable>
डेस्टिनेशन फ़्लो वैरिएबल को "ErrorOnCopy" वैल्यू असाइन करता है.
<Copy>
यह source
एट्रिब्यूट से तय किए गए मैसेज की वैल्यू को से <AssignTo>
एलिमेंट से तय किए गए मैसेज की वैल्यू तक कॉपी करता है. अगर आपने <AssignTo>
के साथ कोई टारगेट तय नहीं किया है, तो यह नीति, अनुरोध या जवाब में वैल्यू कॉपी करती है. यह इस बात पर निर्भर करता है कि इस नीति को फ़्लो में कहां लागू किया जाता है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग |
पैरंट एलिमेंट |
<AssignMessage>
|
चाइल्ड एलिमेंट |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
अगर आपने <Copy>
एलिमेंट के नीचे कोई चाइल्ड एलिमेंट नहीं दिया है, तो यह सोर्स मैसेज के सभी हिस्सों को कॉपी करेगा.
<Copy>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
> name<="policy_name"
Co>py so<urce="[request|response]&qu<ot;
!--> Can also <be an empt>y array< (FormParams/) -->
FormP>arams
For<mParam nam>e="formpar<am_name&quo>t;for<mparam_value/FormParam
...<
/Fo>rmParams
< !-- >Can als<o be an empty array (Head>ers/) --><
He>aders
Hea<der name>=&quo<t;he>ader_name&qu<ot;he>ader_<value/H>eader
<...
>/Head<ers
Path[false|true]/Path
< Payload[fa>lse|true]/<Payload
> !-- Ca<n also be an empty array (QueryPa>rams/) -->
< QueryPara>ms
QueryP<aram name=&q>uot;q<ueryparam_na>me"quer<yparam_value/>Query<Param
> ...
/Q<ueryParams<>/span>
R<easo>nPhrase[fals<e|tru>e]/Re<asonPhr>ase
Stat<usCode[f>als<e|tru>e]/<StatusCode
Verb[false|true]/Verb<
>
Version[f>als<e|true]/Version
/Copy
!-- Used as the destination for the Copy values --
A>ssignTo createNew="[<true|fals>e<]" transp>ort="http"
type="[request|response]"destination_variable_name/AssignTo
/AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, request
मैसेज से हेडर, तीन फ़ॉर्म पैरामीटर, पाथ, और सभी क्वेरी पैरामीटर को newRequest
नाम के नए कस्टम अनुरोध में कॉपी किया गया है:
<AssignMessage name="AM-co>py-<1" AssignTo createNew="true" transport=&>quot;http&<quot; typ>e=&<quot;request"new>Reque<st/Assi>gnTo <Copy source="request&qu>ot; < Heade>rs < Header> name=&<quot;Header_Name_1"/ /Head>ers < FormParams FormParam name=&q>uot;For<m_Param_Name_1"/ FormPar>am na<me="Fo>rm_Pa<ram_>Name<_2&qu>ot;/ < FormPa>ram< name>=<"Form_Par>am_Name_3"/ /FormParams Pathtrue/Path QueryParams/ /Copy /AssignMessage
<Payload>
और <Verb>
जैसे एलिमेंट मौजूद न होने की वजह से, नीति मैसेज के उन हिस्सों को कॉपी नहीं करती है.
उदाहरण 2
यहां दिए गए उदाहरण में, सबसे पहले मौजूदा response
मैसेज में मौजूद सभी आइटम हटाए जाते हैं. इसके बाद, secondResponse
नाम के किसी दूसरे मैसेज से सभी वैल्यू कॉपी करके, response
मैसेज में डाली जाती हैं:
<AssignMessage name='AM-Copy-Respo>nse<' AssignTo createNew="false" transport=&quo>t;http&q<uot; type>=&q<uot;response"response/AssignTo !>-- <first r>emo<ve any existing values -- Remove/ !-- then copy eve>ryt<hing from the designated mess>a<ge -- Copy s>ource="secondResponse"/ /AssignMessage
<Copy>
एलिमेंट में सिर्फ़ एक एट्रिब्यूट होता है:
एट्रिब्यूट | ब्यौरा | ज़रूरी है? | टाइप |
---|---|---|---|
source |
इससे कॉपी किए गए सोर्स ऑब्जेक्ट के बारे में पता चलता है.
|
वैकल्पिक | स्ट्रिंग |
<FormParams>
(<Copy>
का बच्चा)
यह <Copy>
एलिमेंट के source
एट्रिब्यूट से तय किए गए अनुरोध से, फ़ॉर्म पैरामीटर को से <AssignTo>
एलिमेंट से तय किए गए अनुरोध में कॉपी करता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <FormParam> एलिमेंट की कैटगरी या खाली कैटगरी |
पैरंट एलिमेंट |
<Copy>
|
चाइल्ड एलिमेंट |
<FormParam> |
<FormParams>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; !--> Can also <be an empt>y array< (FormParams/) --> FormP>arams For<mParam nam>e="formpar<am_name&quo>t;f<ormpa>r<am_value/FormP>aram ... /FormParams /Copy /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, अनुरोध से एक फ़ॉर्म पैरामीटर को "MyCustomRequest" कस्टम अनुरोध में कॉपी किया गया है:
<AssignMessage name="copy-formpara>ms-<1" Copy source>=&quo<t;request&>quot; < FormParams FormPa>ram name="par<amName&quo>t;For<m param val>ue <1/For>mPa<ram /FormParams /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
दूसरा उदाहरण
यहां दिए गए उदाहरण में, फ़ॉर्म के सभी पैरामीटर को कस्टम अनुरोध "MyCustomRequest" में कॉपी किया गया है:
<AssignMessage name="copy-formpara>ms-<2" Copy source>=&quo<t;request&q>uot<; > Fo<rmParams/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
उदाहरण 3
यहां दिए गए उदाहरण में, तीन फ़ॉर्म पैरामीटर को कस्टम अनुरोध "MyCustomRequest" में कॉपी किया गया है:
<AssignMessage name="copy-formpara>ms-<3" Copy source>=&quo<t;request&>quot; < FormParams FormPara>m name=<"paramName1"/ > FormP<aram name="paramName2&q>uot;/< Form>Par<am na>me=<"paramName3"/ /FormParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
उदाहरण 4
अगर एक ही नाम वाले कई फ़ॉर्म पैरामीटर हैं, तो इस सिंटैक्स का इस्तेमाल करें:
<AssignMessage name="copy-formpara>ms-<4" Copy source>=&quo<t;request&>quot; < FormParams >FormPar<am name="f1&quo>t;/ < FormParam name=&quo>t;f2&<quot;/ > F<ormPa>ram< name="f3.2"/ /FormParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
इस उदाहरण में, "f1", "f2", और "f3" की दूसरी वैल्यू कॉपी की गई है. अगर "f3" में सिर्फ़ एक वैल्यू है, तो उसे कॉपी नहीं किया जाता.
<FormParams>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- एचटीटीपी वर्ब: POST
- मैसेज का टाइप: जवाब
- इनमें से कोई एक या दोनों:
- फ़ॉर्म डेटा: इसे किसी वैल्यू पर सेट किया जाता है या "" (खाली स्ट्रिंग) पर सेट किया जाता है. उदाहरण के लिए,
curl
के साथ, अपने अनुरोध में-d ""
जोड़ें. Content-Length
हेडर: अगर ओरिजनल अनुरोध में कोई डेटा नहीं है, तो इसे 0 पर सेट करें. अगर ओरिजनल अनुरोध में डेटा है, तो इसे मौजूदा लंबाई पर सेट करें. उदाहरण के लिए,curl
के साथ अपने अनुरोध में-H "Content-Length: 0"
जोड़ें.
- फ़ॉर्म डेटा: इसे किसी वैल्यू पर सेट किया जाता है या "" (खाली स्ट्रिंग) पर सेट किया जाता है. उदाहरण के लिए,
<FormParams>
को कॉपी करने पर, <Copy>
मैसेज के Content-Type
को "application/x-www-form-urlencoded" पर सेट करता है. इसके बाद, मैसेज को टारगेट सेवा पर भेजता है.
<Headers>
(<Copy>
का बच्चा)
यह <Copy>
एलिमेंट के source
एट्रिब्यूट से तय किए गए अनुरोध या जवाब के मैसेज से, एचटीटीपी हेडर को से <AssignTo>
एलिमेंट से तय किए गए अनुरोध या जवाब के मैसेज में कॉपी करता है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <Header> एलिमेंट की कैटगरी या खाली कैटगरी |
पैरंट एलिमेंट |
<Copy>
|
चाइल्ड एलिमेंट |
<Header> |
<Headers>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; >!-- Can al<so be a>n empty< array (Headers/) --> > Headers < H>eader name=&quo<t;header>_na<me&qu>o<t;header_value>/Header ... /Headers /Copy /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, अनुरोध से user-agent
हेडर को नए, कस्टम अनुरोध ऑब्जेक्ट में कॉपी किया गया है:
<AssignMessage name="copy-heade>rs-<1" Copy source>=&quo<t;reque>st"<; Headers Heade>r nam<e=">use<r-age>nt&<quot;/ /Headers /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
दूसरा उदाहरण
सभी हेडर कॉपी करने के लिए, खाली <Headers>
एलिमेंट का इस्तेमाल करें. यहां दिए गए उदाहरण में दिखाया गया है कि ऐसा कैसे किया जाता है:
<AssignMessage name="copy-heade>rs-<2" Copy source>=&quo<t;reques>t&q<uot;<>/span> < Headers/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
उदाहरण 3
अगर एक ही नाम वाले कई हेडर मौजूद हैं, तो इस सिंटैक्स का इस्तेमाल करें:
<AssignMessage name="copy-heade>rs-<3" Copy source>=&quo<t;reque>st"<; Headers > Head<er name="h1&>quot;/ < Header name=&>quot;<h2">/ < >Hea<der name="h3.2"/ /Headers /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
इस उदाहरण में, "h1", "h2", और "h3" की दूसरी वैल्यू कॉपी की गई है. अगर "h3" में सिर्फ़ एक वैल्यू है, तो उसे कॉपी नहीं किया जाता.
<Path>
(<Copy>
का बच्चा)
इससे यह तय होता है कि पाथ को सोर्स अनुरोध से डेस्टिनेशन अनुरोध में कॉपी किया जाना चाहिए या नहीं. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
अगर "true" है, तो यह नीति from पाथ को <Copy>
एलिमेंट के source
एट्रिब्यूट से तय किए गए अनुरोध मैसेज से कॉपी करती है. इसके बाद, इसे <AssignTo>
एलिमेंट से तय किए गए अनुरोध मैसेज to में कॉपी करती है.
डिफ़ॉल्ट वैल्यू | गलत |
ज़रूरी है? | वैकल्पिक |
समस्या | बूलियन |
पैरंट एलिमेंट |
<Copy>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Path>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce>="[requ<est|r>esp<onse]>&<quot; Path>[false|true]/Path /Copy /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण से पता चलता है कि AssignMessage नीति को, सोर्स अनुरोध से पाथ को कॉपी करके नए, कस्टम अनुरोध ऑब्जेक्ट में डालना चाहिए:
<AssignMessage name="copy-pa>th-<1" Copy source>=&quo<t;re>ques<t&quo>t; < P>ath<true/Path /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
<Path>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- मैसेज का टाइप: अनुरोध
<Payload>
(<Copy>
का बच्चा)
इससे यह तय होता है कि पेलोड को सोर्स से डेस्टिनेशन पर कॉपी किया जाना चाहिए या नहीं. सोर्स और डेस्टिनेशन, अनुरोध या जवाब हो सकते हैं.
अगर इस नीति को "true" पर सेट किया जाता है, तो यह नीति, <Copy>
एलिमेंट के source
एट्रिब्यूट से तय किए गए मैसेज से पेलोड को कॉपी करके, <AssignTo>
एलिमेंट से तय किए गए मैसेज में चिपकाती है.
डिफ़ॉल्ट वैल्यू | गलत |
ज़रूरी है? | वैकल्पिक |
समस्या | बूलियन |
पैरंट एलिमेंट |
<Copy>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Payload>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce=&q>uot;[request<|respons>e]&<quot;> < Payload[fa>lse|true]/Payload /Copy /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, <Payload>
को "true" पर सेट किया गया है, ताकि अनुरोध के पेलोड को अनुरोध से जवाब में कॉपी किया जा सके:
<AssignMessage name="AM-copy-paylo>ad-<1" Copy source>=&quo<t;reque>st&q<uot; > Pa<yload>tru<e/Payloa>d /Cop<y Assig>n<Toresponse/Ass>ignTo /AssignMessage
<QueryParams>
(<Copy>
का बच्चा)
यह क्वेरी स्ट्रिंग पैरामीटर को, <Copy>
एलिमेंट के source
एट्रिब्यूट से तय किए गए अनुरोध से, <AssignTo>
एलिमेंट से तय किए गए अनुरोध तक कॉपी करता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <QueryParam> एलिमेंट की कैटगरी या खाली कैटगरी |
पैरंट एलिमेंट |
<QueryParam>
|
चाइल्ड एलिमेंट | कोई नहीं |
<QueryParams>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[request|response]&qu<ot; !-- >Can also b<e an empty >array (<QueryParams/) --> QueryPar>ams QueryP<aram name=&>quot;queryparam<_name"q>uer<ypara>m<_value/QueryPa>ram ... /QueryParams /Copy /AssignMessage
उदाहरण 1
इस उदाहरण में, अनुरोध से "my_param" क्वेरी पैरामीटर को कॉपी करके, नए कस्टम अनुरोध ऑब्जेक्ट में डाला गया है:
<AssignMessage name="copy-querypara>ms-<1" Copy source>=&quo<t;request&q>uot; < QueryParams QueryPa>ram n<ame="my>_pa<ram&q>uot<;/ /QueryParams /Copy AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo /AssignMessage
उदाहरण 2
इस उदाहरण में, अनुरोध के सभी क्वेरी पैरामीटर को नए कस्टम अनुरोध ऑब्जेक्ट में कॉपी किया गया है:
<AssignMessage name="copy-querypara>ms-<2" Copy source>=&quo<t;request&qu>ot;< >Que<ryParams/ /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
उदाहरण 3
अगर एक ही नाम वाले कई क्वेरी पैरामीटर हैं, तो इस सिंटैक्स का इस्तेमाल करें:
<AssignMessage name="copy-querypara>ms-<3" Copy source>=&quo<t;request&q>uot; < QueryParams Qu>eryPara<m name="qp1">/ < QueryParam name="q>p2&qu<ot;/ Q>uer<yPara>m n<ame="qp3.2"/ /QueryParams /Copy AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo /AssignMessage
इस उदाहरण में, "qp1", "qp2", और "qp3" की दूसरी वैल्यू कॉपी की गई है. अगर "qp3" में सिर्फ़ एक वैल्यू है, तो उसे कॉपी नहीं किया जाता.
<QueryParams>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- एचटीटीपी वर्ब: GET
- मैसेज का टाइप: अनुरोध
<ReasonPhrase>
(<Copy>
का बच्चा)
इससे यह तय होता है कि वजह बताने वाले वाक्यांश को सोर्स रिस्पॉन्स से डेस्टिनेशन रिस्पॉन्स में कॉपी किया जाना चाहिए या नहीं. इस एलिमेंट का अनुरोध पर कोई असर नहीं पड़ता.
अगर "true" है, तो यह नीति <Copy>
एलिमेंट के source
एट्रिब्यूट से तय किए गए जवाब से ReasonPhrase
को <AssignTo>
एलिमेंट से तय किए गए जवाब तक कॉपी करती है.
डिफ़ॉल्ट वैल्यू | गलत |
ज़रूरी है? | वैकल्पिक |
समस्या | बूलियन |
पैरंट एलिमेंट |
<Copy>
|
चाइल्ड एलिमेंट | कोई नहीं |
<ReasonPhrase>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce="[>request|resp<onse]" > <Reaso>n<Phrase[false|t>rue]/ReasonPhrase /Copy /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, <ReasonPhrase>
को true
पर सेट करने का तरीका बताया गया है. सोर्स और <AssignTo>
एलिमेंट के बारे में बताई गई जानकारी के हिसाब से, <Copy>
, नाम वाले रिस्पॉन्स मैसेज से response
ऑब्जेक्ट में वजह वाला वाक्यांश कॉपी करता है:
<AssignMessage name="AM-copy-reasonphra>se-<1" Copy source="serviceC>allou<tResponse&qu>ot; < ReasonPhr>ase<true/>Rea<sonPhras>e /Cop<y Assig>n<Toresponse/Ass>ignTo /AssignMessage
<ReasonPhrase>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब सोर्स और डेस्टिनेशन मैसेज, रिस्पॉन्स टाइप के हों.
<StatusCode>
(<Copy>
का बच्चा)
इस कुकी से यह तय होता है कि स्टेटस कोड को सोर्स रिस्पॉन्स से डेस्टिनेशन रिस्पॉन्स में कॉपी किया गया है या नहीं. इस एलिमेंट का अनुरोध पर कोई असर नहीं पड़ता.
अगर "true" है, तो यह नीति, <Copy>
एलिमेंट के source
एट्रिब्यूट से तय किए गए रिस्पॉन्स मैसेज से, स्टेटस कोड को <AssignTo>
एलिमेंट से तय किए गए रिस्पॉन्स मैसेज में कॉपी करती है.
डिफ़ॉल्ट वैल्यू | गलत |
ज़रूरी है? | वैकल्पिक |
समस्या | बूलियन |
पैरंट एलिमेंट |
<Copy>
|
चाइल्ड एलिमेंट | कोई नहीं |
<StatusCode>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce=">;[request|re<sponse]&quo>t; < S>t<atusCode[false>|true]/StatusCode /Copy /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, <StatusCode>
को "true" पर सेट किया गया है. इससे स्टेटस कोड, डिफ़ॉल्ट रिस्पॉन्स ऑब्जेक्ट से नए, कस्टम रिस्पॉन्स ऑब्जेक्ट में कॉपी हो जाता है:
<AssignMessage name="copy-statusco>de-<1" Copy source=>"<;response&>quot<; Statu>sCo<detru>e/S<tatusCode /Copy AssignTo createNew="true" tr>ansport="ht<tp" >t<ype="resp>onse"MyCustomResponse/AssignTo /AssignMessage
<StatusCode>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब सोर्स और डेस्टिनेशन मैसेज, रिस्पॉन्स टाइप के हों.
<StatusCode>
का इस्तेमाल आम तौर पर, प्रॉक्सी रिस्पॉन्स स्टेटस कोड को टारगेट से मिले कोड से अलग वैल्यू पर सेट करने के लिए किया जाता है.
<Verb>
(<Copy>
का बच्चा)
यह कुकी तय करती है कि एचटीटीपी वर्ब को सोर्स अनुरोध से डेस्टिनेशन अनुरोध में कॉपी किया गया है या नहीं. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
अगर "true" है, तो <Copy>
एलिमेंट के source
एट्रिब्यूट में मौजूद क्रिया को <AssignTo>
एलिमेंट में दिए गए अनुरोध में कॉपी करता है.
डिफ़ॉल्ट वैल्यू | गलत |
ज़रूरी है? | वैकल्पिक |
समस्या | बूलियन |
पैरंट एलिमेंट |
<Copy>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Verb>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce>="[requ<est|r>esp<onse]>&<quot; Verb>[false|true]/Verb /Copy /AssignMessage
उदाहरण 1
नीचे दिए गए उदाहरण में, <Verb>
को "true" पर सेट किया गया है. इससे डिफ़ॉल्ट अनुरोध से वर्ब को नए, कस्टम अनुरोध में कॉपी किया जाता है:
<AssignMessage name="copy-ve>rb-<1" Copy source>=&quo<t;re>ques<t&quo>t; < V>erb<true/Verb /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
<Verb>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- मैसेज का टाइप: अनुरोध
<Version>
(<Copy>
का बच्चा)
यह कुकी तय करती है कि एचटीटीपी वर्शन को सोर्स अनुरोध से डेस्टिनेशन अनुरोध में कॉपी किया गया है या नहीं. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
अगर "true" पर सेट है, तो <Copy>
एलिमेंट के source
एट्रिब्यूट में मौजूद एचटीटीपी वर्शन को, <AssignTo>
एलिमेंट से तय किए गए ऑब्जेक्ट में कॉपी करता है.
डिफ़ॉल्ट वैल्यू | गलत |
ज़रूरी है? | वैकल्पिक |
समस्या | बूलियन |
पैरंट एलिमेंट |
<Copy>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Version>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name" Co>py so<urce=&q>uot;[request<|respons>e]&<quot;> < Version[fa>lse|true]/Version /Copy /AssignMessage
उदाहरण 1
इस उदाहरण में, अनुरोध पर <Version>
को "true" पर सेट किया गया है. इससे डिफ़ॉल्ट अनुरोध ऑब्जेक्ट से वर्शन को नए, कस्टम अनुरोध ऑब्जेक्ट में कॉपी किया जाता है:
<AssignMessage name="copy-versi>on-<1" Copy source>=&quo<t;reque>st&q<uot; > Ve<rsion>tru<e/Version /Copy AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
<Version>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- मैसेज का टाइप: अनुरोध
<DisplayName>
name
एट्रिब्यूट के साथ-साथ, नीति को मैनेज करने वाले यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में, नीति को किसी ऐसे नाम से लेबल करें जो सामान्य हो और सुनने में अच्छा लगे.
<DisplayName>
एलिमेंट सभी नीतियों में एक जैसा होता है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
क्या यह ज़रूरी है? | ज़रूरी नहीं. <DisplayName> को छोड़ने पर, नीति के name एट्रिब्यूट की वैल्यू का इस्तेमाल किया जाता है |
स्ट्रीम किस तरह की है | स्ट्रिंग |
पैरंट एलिमेंट | <PolicyElement> |
चाइल्ड एलिमेंट | कोई नहीं |
<DisplayName>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
उदाहरण
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
<DisplayName>
एलिमेंट में कोई एट्रिब्यूट या चाइल्ड एलिमेंट नहीं है.
<IgnoreUnresolvedVariables>
यह कुकी तय करती है कि किसी ऐसे वैरिएबल का सामना होने पर प्रोसेसिंग बंद हो जाएगी या नहीं जिसे हल नहीं किया जा सका है.
डिफ़ॉल्ट वैल्यू | गलत |
ज़रूरी है? | वैकल्पिक |
समस्या | बूलियन |
पैरंट एलिमेंट |
<AssignMessage>
|
चाइल्ड एलिमेंट | कोई नहीं |
अनसुलझे वैरिएबल को अनदेखा करने और प्रोसेसिंग जारी रखने के लिए, इसे true
पर सेट करें. ऐसा न करने पर, इसे false
पर सेट करें. डिफ़ॉल्ट वैल्यू false
है.
<IgnoreUnresolvedVariables>
को true
पर सेट करना, <AssignMessage>
के continueOnError
को true
पर सेट करने से अलग है. ऐसा इसलिए, क्योंकि यह वैरिएबल की वैल्यू सेट करने और पाने से जुड़ा है. अगर आपने continueOnError
को true
पर सेट किया है, तो Edge सभी गड़बड़ियों को अनदेखा कर देगा. सिर्फ़ उन गड़बड़ियों को नहीं जो वैरिएबल का इस्तेमाल करते समय हुई हैं.
<IgnoreUnresolvedVariables>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me="policy_name">; IgnoreUnre<solvedVariables[true|false>]< /IgnoreUnre>solvedVariables /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, <IgnoreUnresolvedVariables>
को "सही" पर सेट करने का तरीका बताया गया है:
<AssignMessage name="AM-Set-Hea>der<s&q>uot; < Set > Head<ers Header name=>39;new-header'{possibly<-defin>ed-va<riable}H>ead<er > </Headers /Set IgnoreU>nresolv<edVariablestrue /IgnoreU>n<resolvedVariab>les /AssignMessage
<IgnoreUnresolvedVariables>
को true
पर सेट किया गया है. इसलिए, अगर possibly-defined-variable
वैरिएबल को तय नहीं किया जाता है, तो यह नीति कोई गड़बड़ी नहीं दिखाएगी.
<Remove>
यह कुकी, किसी मैसेज से हेडर, क्वेरी पैरामीटर, फ़ॉर्म पैरामीटर, और/या मैसेज पेलोड को हटाती है. यह मैसेज, अनुरोध या जवाब हो सकता है. <AssignTo>
एलिमेंट का इस्तेमाल करके, यह तय किया जाता है कि <Remove>
किस मैसेज पर कार्रवाई करेगा.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | कॉम्प्लेक्स टाइप |
पैरंट एलिमेंट |
<AssignMessage>
|
चाइल्ड एलिमेंट |
<FormParams> <Headers> <Payload> <QueryParams> |
<Remove>
का इस्तेमाल आम तौर पर, क्वेरी पैरामीटर या हेडर को मिटाने के लिए किया जाता है. इसमें आने वाले अनुरोध ऑब्जेक्ट से संवेदनशील जानकारी होती है, ताकि इसे बैकएंड सर्वर को न भेजा जा सके.
<Remove>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also >be an empt<y array (F>ormPara<ms/) --> FormParams > FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_val<ue/FormParam ... /Form<Params > !-- Can< also b>e an em<pty array (Headers/) --&g>t; Heade<rs > Header name=&<quot;hea>der_n<ame&quo>t;header_val<ue/Heade>r < ... /Headers Payload[<false|true]/>Payload < !-- Can a>lso be <an empty array (QueryParams/) --&>gt; QueryPar<ams Q>ueryParam name=<"queryp>ara<m_name&>q<uot;queryparam>_value/QueryParam ... /QueryParams /Remove /AssignMessage
उदाहरण 1
इस उदाहरण में, जवाब से मैसेज का मुख्य हिस्सा हटाया गया है:
<AssignMessage name="AM-remo>ve-<1" D>isplayNa<meremove-1/D>isp<layNam>e R<emove > P<ayloadtr>ue/<Payload> </Remove > Assign<Torespons>e</AssignTo /Ass>ignMessage
जवाब के फ़्लो में, यह नीति जवाब के मुख्य हिस्से को हटा देती है. साथ ही, क्लाइंट को सिर्फ़ एचटीटीपी हेडर दिखाती है.
दूसरा उदाहरण
यहां दिए गए उदाहरण में, request
ऑब्जेक्ट से सभी फ़ॉर्म पैरामीटर और क्वेरी पैरामीटर हटाए गए हैं:
<AssignMessage name="AM-remo>ve-<2">; R<emove !<-- Empty (F>ormParams/) removes all form par>amete<rs -- F>ormPa<rams/ Q>ueryPar<ams QueryParam n>ame=&<quot;qp1&quo>t;/< /Q>uer<yParams > /Remo<ve Assi>g<nTorequest/Ass>ignTo /AssignMessage
उदाहरण 3
यहां दिए गए उदाहरण में, मैसेज ऑब्जेक्ट से सभी चीज़ें हटाई गई हैं:
<AssignMessage name="AM-remo>ve-<3"> <Remove/ > Assig<nToreques>t</AssignTo /Ass>ignMessage
आम तौर पर, ऐसा सिर्फ़ तब किया जाता है, जब आपको मैसेज में कुछ बदली गई वैल्यू सेट करने के लिए, <Set>
एलिमेंट या <Copy>
एलिमेंट का इस्तेमाल करना हो.
<FormParams>
(<Remove>
का बच्चा)
यह फ़ंक्शन, अनुरोध से तय किए गए फ़ॉर्म पैरामीटर हटाता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <FormParam> एलिमेंट की कैटगरी या खाली कैटगरी |
पैरंट एलिमेंट |
<Remove>
|
चाइल्ड एलिमेंट |
<FormParam> |
<FormParams>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also >be an empt<y array (F>ormPara<ms/) --> FormParams > FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_v<alue/Fo>r<mParam .>.. /FormParams /Remove /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, अनुरोध से तीन फ़ॉर्म पैरामीटर हटाए गए हैं:
<AssignMessage name="AM-remove-formpara>ms-<1">; R<emove >FormPar<ams FormParam name=">;form_p<aram_1"/ FormParam >name=&q<uot;form_param_2"/ >FormP<aram name=&>quo<t;form_>par<am_3&quo>t;/ < /FormPar>a<ms /Remove > AssignTorequest/AssignTo /AssignMessage
उदाहरण 2
यहां दिए गए उदाहरण में, अनुरोध से सभी फ़ॉर्म पैरामीटर हटा दिए गए हैं:
<AssignMessage name="AM-remove-formpara>ms-<2">; R<emove F>orm<Params/> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
उदाहरण 3
अगर एक ही नाम वाले कई फ़ॉर्म पैरामीटर हैं, तो इस सिंटैक्स का इस्तेमाल करें:
<AssignMessage name="AM-remove-formpara>ms-<3">; R<emove >FormPar<ams FormParam >name=&q<uot;f1"/ >FormPar<am name="f2">/ < FormPara>m n<ame=&qu>ot;<f3.2&quo>t;/ < /FormPar>a<ms /Remove > AssignTorequest/AssignTo /AssignMessage
इस उदाहरण में, "f1", "f2", और "f3" की दूसरी वैल्यू को हटाया गया है. अगर "f3" में सिर्फ़ एक वैल्यू है, तो उसे नहीं हटाया जाएगा.
<FormParams>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- मैसेज का टाइप: अनुरोध
Content-Type
: "application/x-www-form-urlencoded"
<Headers>
(<Remove>
का बच्चा)
यह कुकी, अनुरोध या जवाब से बताए गए एचटीटीपी हेडर हटाती है. यह हेडर, <AssignTo>
एलिमेंट से तय किया जाता है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <Header> एलिमेंट की कैटगरी या खाली कैटगरी |
पैरंट एलिमेंट |
<Remove>
|
चाइल्ड एलिमेंट |
<Header> |
<Headers>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can al>so be an e<mpty ar>ray (He<aders/) --> Header>s Head<er name>="header_n<ame">;he<ader_va>l<ue/Header > ... /Headers /Remove /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, अनुरोध से user-agent
हेडर को हटाया गया है:
<AssignMessage name="AM-remove-one-he>ade<r">; R<emove > Head<ers Header name=&qu>ot;us<er-agent>&qu<ot;/ > /<Headers > /Remo<ve Assi>g<nTorequest/Ass>ignTo /AssignMessage
उदाहरण 2
यहां दिए गए उदाहरण में, अनुरोध से सभी हेडर हटाए गए हैं:
<AssignMessage name="AM-remove-all-hea>der<s">; R<emove > H<eaders/> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
उदाहरण 3
अगर एक ही नाम वाले कई हेडर मौजूद हैं, तो इस सिंटैक्स का इस्तेमाल करें:
<AssignMessage name="AM-remove-heade>rs-<3">; R<emove > Head<ers Header >name=&q<uot;h1"/ > Head<er name="h2&qu>ot;/ < He>ade<r name=>&qu<ot;h3.2&>quot;/ < /Head>e<rs /Remove > AssignTorequest/AssignTo /AssignMessage
इस उदाहरण में, अनुरोध से "h1", "h2", और "h3" की दूसरी वैल्यू को हटाया गया है. अगर "h3" में सिर्फ़ एक वैल्यू है, तो उसे नहीं हटाया जाता.
<Payload>
(<Remove>
का बच्चा)
यह कुकी तय करती है कि <Remove>
, अनुरोध या जवाब में मौजूद पेलोड को मिटाता है या नहीं. यह पेलोड, <AssignTo>
एलिमेंट से तय होता है. पे लोड को मिटाने के लिए, इसे "सही" पर सेट करें. ऐसा न करने पर, इसे "गलत" पर सेट करें. डिफ़ॉल्ट वैल्यू "false" होती है.
डिफ़ॉल्ट वैल्यू | गलत |
ज़रूरी है? | वैकल्पिक |
समस्या | बूलियन |
पैरंट एलिमेंट |
<Remove>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Payload>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_na>me" <Remove > <Payload>[<false|true]/Pa>yload /Remove /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, <Payload>
को "true" पर सेट किया गया है, ताकि अनुरोध पेलोड को मिटाया जा सके:
<AssignMessage name="AM-remove-paylo>ad-<1">; R<emove > P<ayloadtr>ue/<Payload> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
<QueryParams>
(<Remove>
का बच्चा)
यह फ़ंक्शन, अनुरोध से तय किए गए क्वेरी पैरामीटर हटाता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <QueryParam> एलिमेंट की कैटगरी या खाली कैटगरी |
पैरंट एलिमेंट |
<Remove>
|
चाइल्ड एलिमेंट |
<QueryParam> |
<QueryParams>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=&qu>ot;po<licy_name" Remove !-<- Can also b>e an empty< array (Que>ryParam<s/) --> QueryParams >QueryParam name=<"query>param_name"<;queryparam_>val<ue/Quer>y<Param ..>. /QueryParams /Remove /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, अनुरोध से एक क्वेरी पैरामीटर हटाया गया है:
<AssignMessage name="AM-remove-querypara>ms-<1">; Rem<ove Q>ueryParam<s QueryParam n>ame=&qu<ot;qp1">/ < /Q>uer<yParams > /Remo<ve Assi>g<nTorequest/Ass>ignTo /AssignMessage
उदाहरण 2
यहां दिए गए उदाहरण में, अनुरोध से सभी क्वेरी पैरामीटर हटा दिए गए हैं:
<AssignMessage name="AM-remove-querypara>ms-<2">; Rem<ove Qu>ery<Params/> </Remove > Assig<nToreques>t</AssignTo /Ass>ignMessage
उदाहरण 3
अगर एक ही नाम वाले कई क्वेरी पैरामीटर हैं, तो इस सिंटैक्स का इस्तेमाल करें:
<AssignMessage name="AM-remove-querypara>ms-<3">; Rem<ove Q>ueryParam<s QueryParam n>ame="<;qp1"/ Qu>eryParam <name="qp2"/ > Q<ueryParam na>me=<"q>p3.<2"/> </QueryPar>a<ms /Remove > AssignTorequest/AssignTo /AssignMessage
इस उदाहरण में, अनुरोध से "qp1", "qp2", और "qp3" की दूसरी वैल्यू को हटाया गया है. अगर "qp3" की सिर्फ़ एक वैल्यू है, तो उसे नहीं हटाया जाएगा.
उदाहरण 4
यहां दिए गए उदाहरण में, अनुरोध से apikey
क्वेरी पैरामीटर को हटाया गया है:
<AssignMessage name="AM-remove-query-p>ara<m">; R<emove Q>ueryPar<ams QueryParam name>=&quo<t;apikey&quo>t;/< /Q>uer<yParams > /Remo<ve Assi>g<nTorequest/Ass>ignTo /AssignMessage
<QueryParams>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- एचटीटीपी वर्ब: GET
- मैसेज का टाइप: अनुरोध
<Set>
यह अनुरोध या जवाब के मैसेज में ऐसी जानकारी सेट करता है जिसे <AssignTo>
एलिमेंट से तय किया जाता है. <Set>
हेडर या क्वेरी या फ़ॉर्म पैरामीटर को बदलता है. ये पैरामीटर, मूल मैसेज में पहले से मौजूद होते हैं. किसी एचटीटीपी मैसेज में हेडर, क्वेरी, और फ़ॉर्म पैरामीटर में एक से ज़्यादा वैल्यू हो सकती हैं. किसी हेडर या पैरामीटर के लिए अतिरिक्त वैल्यू जोड़ने के लिए, <Add>
एलिमेंट का इस्तेमाल करें.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | कॉम्प्लेक्स टाइप |
पैरंट एलिमेंट |
<AssignMessage>
|
चाइल्ड एलिमेंट |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
<Set>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me"<; Set FormParams F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am < ... /FormParams > Headers < Head>er name="h<eader_na>me&qu<ot;h>eade<r_val>ue/He<ader ... /Headers Pathpath/Path Payload contentType="content_type&q>uot; variab<lePrefix>=&quo<t;prefix&qu>ot; < variableSuffix="suffix&>quot;new_payload</Payload > QueryParams < QueryPa>ram n<ame="qu>eryparam_name"queryparam_<value/QueryPa>ram < ... > /QueryParams ReasonPhra<sereason_fo>r_err<or o>r {variable}/ReasonPhrase StatusCo<deHTT>P_sta<tus_cod>e or {variable}/Stat<usCod>e < V>e<rb[GET|POST|PU>T|PATCH|DELETE|{variable}]/Verb Version[1.0|1.1|{variable}]/Verb /Set /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, एक हेडर सेट किया गया है. इस नीति को अनुरोध फ़्लो में अटैच करने पर, अपस्ट्रीम सिस्टम को एक अतिरिक्त हेडर मिलेगा. यह हेडर, ओरिजनल इनबाउंड अनुरोध में शामिल नहीं था.
<AssignMessage name="AM-Set-He>ade<r&q>uot; < Set > Header<s Header name="authentic>ated-developer"{verifyapikey<.VAK-1.>devel<oper.id}>/He<ader> < /Heade>rs /S<et Assi>g<nTorequest/Ass>ignTo /AssignMessage
उदाहरण 2
यहां दिए गए उदाहरण में, रिस्पॉन्स के पेलोड के साथ-साथ Content-Type
हेडर को भी बदला गया है.
<AssignMessage name="AM-Overwrite-Pay>loa<d&q>uot; < Set Payload contentType="ap>plication/json&qu<ot;{ &qu>ot;<stat>us&<quot; : >42 }/Pay<load /S>e<t AssignTore>sponse/AssignTo /AssignMessage
<FormParams>
(<Set>
का बच्चा)
यह अनुरोध पर मौजूद फ़ॉर्म पैरामीटर को बदलता है और उन्हें उन नई वैल्यू से बदलता है जिन्हें आपने इस एलिमेंट के साथ तय किया है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <FormParam> एलिमेंट का कलेक्शन |
पैरंट एलिमेंट |
<Set>
|
चाइल्ड एलिमेंट |
<FormParam> |
<FormParams>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me"<; Set FormParams F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/Fo>r<mParam .>.. /FormParams /Set /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, "myparam" नाम के फ़ॉर्म पैरामीटर को नए कस्टम अनुरोध में request.header.myparam
वैरिएबल की वैल्यू पर सेट किया गया है:
<AssignMessage name="AM-set-formpara>ms-<1&q>uot; < Set >FormPar<ams FormParam name>="myparam"{req<uest.heade>r.myp<aram}/FormP>ara<m > /<FormParams /Set AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo /AssignMessage
<FormParams>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- एचटीटीपी वर्ब: POST
- मैसेज का टाइप: अनुरोध
अगर आपने अपनी नीति (<Add><FormParams/></Add>
) में खाली फ़ॉर्म पैरामीटर तय किए हैं, तो नीति कोई फ़ॉर्म पैरामीटर नहीं जोड़ती है. इसका मतलब है कि <FormParams>
को शामिल नहीं किया गया है.
<Set>
, मैसेज को टारगेट एंडपॉइंट पर भेजने से पहले, मैसेज के Content-Type
को "application/x-www-form-urlencoded" में बदल देता है.
<Headers>
(<Set>
का बच्चा)
अनुरोध या जवाब में मौजूद एचटीटीपी हेडर को बदलता है. यह <AssignTo>
एलिमेंट से तय होता है.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <Header> एलिमेंट का कलेक्शन |
पैरंट एलिमेंट |
<Set>
|
चाइल्ड एलिमेंट |
<Header> |
<Headers>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy>_name&q<uot; Set Headers > Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header > ... /Headers /Set /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, x-ratelimit-remaining
हेडर को ratelimit.Quota-1.available.count
वैरिएबल की वैल्यू पर सेट किया गया है:
<AssignMessage name="AM-Set-RateLimit-He>ade<r&q>uot; < Set > Head<ers Header name="X-RateL>imit-Remaining"{ratelimit.Quot<a-1.ava>ilabl<e.count}>/He<ader> < /Heade>rs /Se<t Assig>n<Toresponse/Ass>ignTo /AssignMessage
अगर आपने अपनी नीति (<Set><Headers/></Set>
) में खाली हेडर तय किए हैं, तो नीति कोई हेडर सेट नहीं करती है. इससे <Headers>
को हटाने जैसा ही असर होगा.
<Path>
(<Set>
का बच्चा)
<Payload>
(<Set>
का बच्चा)
यह अनुरोध या जवाब के लिए मैसेज का मुख्य हिस्सा तय करता है. इसे <AssignTo>
एलिमेंट से तय किया जाता है. पेलोड, किसी भी मान्य कॉन्टेंट टाइप का हो सकता है. जैसे, सादा टेक्स्ट, JSON या XML.
डिफ़ॉल्ट वैल्यू | खाली स्ट्रिंग |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग |
पैरंट एलिमेंट |
<Set>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Payload>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_name" Set Payload contentType="content_type" variablePrefix=>"prefi<x"<>/span> < > <variableSuffix>="suffix"new_payload/Payload /Set /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, सादा टेक्स्ट वाला पेलोड सेट किया गया है:
<AssignMessage name="set-paylo>ad-<1&q>uot; < Set Payload contentType=&q>uo<t;text/p>lai<n&qu>o<t;42/Payload > /Set /AssignMessage
उदाहरण 2
यहां JSON पेलोड सेट करने का उदाहरण दिया गया है:
<AssignMessage name="set-paylo>ad-<2&q>uot; < Set Payload contentType="ap>plication/json" {"name&q<uot;:&qu>ot;<foo&>q<uot;, "ty>pe":"bar"} /Payload /Set /AssignMessage
उदाहरण 3
यहां दिए गए उदाहरण में, वैरिएबल के नामों को कर्ली ब्रेसिज़ में रैप करके, वैरिएबल की वैल्यू को पेलोड में डाला गया है:
<AssignMessage name="set-paylo>ad-<3&q>uot; < Set Payload contentType="ap>plication/json" {"name":"f<oo">, &<quot>;<type":&qu>ot;{variable_name}"} /Payload /Set /AssignMessage
Apigee के पिछले वर्शन में, JSON पेलोड में वैरिएबल रेफ़रंस दिखाने के लिए कर्ली ब्रेसिज़ का इस्तेमाल नहीं किया जा सकता था. इन रिलीज़ में, आपको डेलिमिटर वर्णों के बारे में बताने के लिए variablePrefix
और variableSuffix
एट्रिब्यूट का इस्तेमाल करना होता था. साथ ही, वैरिएबल के नामों को रैप करने के लिए इनका इस्तेमाल करना होता था. जैसे:
<AssignMessage name="set-payloa>d-3<b&q>uot; < Set Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#" {&quo<t;name&q>uot<;:&q>u<ot;foo", >"type":"@variable_name#"} /Payload /Set /AssignMessage
यह पुराना सिंटैक्स अब भी काम करता है.
उदाहरण 4
<Payload>
के कॉन्टेंट को मैसेज टेंप्लेट माना जाता है. इसका मतलब है कि AssignMessage नीति, कर्ली ब्रेसिज़ में रैप किए गए वैरिएबल को रनटाइम में रेफ़र किए गए वैरिएबल की वैल्यू से बदल देती है.
इस उदाहरण में, कर्ली ब्रेसिज़ सिंटैक्स का इस्तेमाल करके, पेलोड के कुछ हिस्से को वैरिएबल वैल्यू पर सेट किया गया है:
<AssignMessage name="set-paylo>ad-<4&q>uot; < Set Payload contentType=>"t<ext/>xml"< > r<oot> <e1>sunday</e1> <e2>funday</e2> < e3{>var1}</e3 > /<root> < /Payload > /Set /AssignMessage
यहां दी गई टेबल में, <Payload>
एट्रिब्यूट के बारे में बताया गया है:
एट्रिब्यूट | ब्यौरा | मौजूदगी | टाइप |
---|---|---|---|
contentType |
अगर यह विकल्प चुना जाता है, तो |
वैकल्पिक | स्ट्रिंग |
variablePrefix |
यह फ़्लो वैरिएबल पर मौजूद मुख्य डीलिमिटर के बारे में बताता है. हालांकि, ऐसा करना ज़रूरी नहीं है. इसकी डिफ़ॉल्ट वैल्यू "{" होती है. ज़्यादा जानकारी के लिए, फ़्लो वैरिएबल का रेफ़रंस देखें. | वैकल्पिक | Char |
variableSuffix |
यह विकल्प, फ़्लो वैरिएबल पर ट्रेलिंग डीलिमिटर के बारे में बताता है. डिफ़ॉल्ट रूप से "}" होता है. ज़्यादा जानकारी के लिए, फ़्लो वैरिएबल का रेफ़रंस देखें. | वैकल्पिक | Char |
<QueryParams>
(<Set>
का बच्चा)
अनुरोध में मौजूद क्वेरी पैरामीटर को नई वैल्यू से बदलता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | <QueryParam> एलिमेंट का कलेक्शन |
पैरंट एलिमेंट |
<Set>
|
चाइल्ड एलिमेंट |
<QueryParam> |
<QueryParams>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_nam>e"< Set QueryParams Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param ..>. /QueryParams /Set /AssignMessage
उदाहरण 1
इस उदाहरण में, "address" क्वेरी पैरामीटर को request.header.address
वैरिएबल की वैल्यू पर सेट किया गया है:
<AssignMessage name="AM-set-querypara>ms<-1&>quot;< Set Q>ueryPar<ams QueryParam name>="address"{req<uest.header>.addr<ess}/QueryPa>ram< > </QueryParams > /Set /AssignMessage
<QueryParams>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- एचटीटीपी वर्ब: GET
- मैसेज का टाइप: अनुरोध
अगर आपने अपनी नीति में खाली क्वेरी पैरामीटर (<Set><QueryParams/></Set>
) तय किए हैं, तो नीति कोई क्वेरी पैरामीटर सेट नहीं करती है. इसका मतलब है कि <QueryParams>
को शामिल नहीं किया गया है.
<ReasonPhrase>
(<Set>
का बच्चा)
यह कुकी, जवाब में वजह का वाक्यांश सेट करती है. आम तौर पर, इसका इस्तेमाल <StatusCode>
के साथ मिलकर डीबग करने के लिए किया जाता है. इस एलिमेंट का अनुरोध पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग |
पैरंट एलिमेंट |
<Set>
|
चाइल्ड एलिमेंट | कोई नहीं |
<ReasonPhrase>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_name>" Set ReasonPhrase<reason_for_er>ror< or >{<variable}/Reas>onPhrase /Set /AssignMessage
उदाहरण 1
यहां वजह बताने वाले एक सामान्य वाक्यांश का उदाहरण दिया गया है:
<AssignMessage name="set-reasonphra>se-<1&q>uot; < Set Re>asonPhraseBa<d medicine/Re>aso<nPhr>ase< /Set AssignTo createNew="true" transport=&qu>o<t;http" t>ype="response"/ /AssignMessage
उदाहरण 2
<ReasonPhrase>
के कॉन्टेंट को मैसेज टेंप्लेट माना जाता है. इसका मतलब है कि कर्ली ब्रेसिज़ में रैप किए गए वैरिएबल के नाम को रनटाइम में, रेफ़रंस किए गए वैरिएबल की वैल्यू से बदल दिया जाएगा. जैसा कि यहां दिए गए उदाहरण में दिखाया गया है:
<AssignMessage name="AM-set-reasonphra>se-<2&q>uot; < Set Re>asonPhrase{calloutresponse.reas<on.phrase}/Re>aso<nPhr>ase< /Set > Assign<Torespons>e</AssignTo /Ass>ignMessage
<ReasonPhrase>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- मैसेज का टाइप: जवाब
<StatusCode>
(<Set>
का बच्चा)
यह कुकी, रिस्पॉन्स पर स्टेटस कोड सेट करती है. इस एलिमेंट का अनुरोध पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | '200' (जब <AssignTo> एट्रिब्यूट के createNew को 'सही है' पर सेट किया जाता है) |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग या variable |
पैरंट एलिमेंट |
<Set>
|
चाइल्ड एलिमेंट | कोई नहीं |
<StatusCode>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy_na>me" Set StatusCode<HTTP_status>_co<de o>r< {variable}/St>atusCode /Set /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, एक सामान्य स्टेटस कोड सेट किया गया है:
<AssignMessage name="AM-set-statuscode>-40<4&q>uot; < Set >Sta<tusCode404/>Sta<tusC>ode< /Set > Assign<Torespons>e</AssignTo /Ass>ignMessage
उदाहरण 2
<StatusCode>
के कॉन्टेंट को मैसेज टेंप्लेट माना जाता है. इसका मतलब है कि कर्ली ब्रेसिज़ में रैप किए गए वैरिएबल के नाम को रनटाइम में, रेफ़रंस किए गए वैरिएबल की वैल्यू से बदल दिया जाएगा. जैसा कि यहां दिए गए उदाहरण में दिखाया गया है:
<AssignMessage name="set-statusco>de-<2&q>uot; < Set >StatusCode{calloutresponse.st<atus.code}/>Sta<tusC>ode< /Set > Assign<Torespons>e</AssignTo /Ass>ignMessage
<StatusCode>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- मैसेज का टाइप: जवाब
<Verb>
(<Set>
का बच्चा)
अनुरोध पर एचटीटीपी वर्ब सेट करता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग या variable |
पैरंट एलिमेंट |
<Set>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Verb>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;pol>icy_name" Set Verb[GET|POS<T|PUT>|PA<TCH|>D<ELETE|{variabl>e}]/Verb /Set /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, अनुरोध पर एक सामान्य क्रिया सेट की गई है:
<AssignMessage name="AM-set-ve>rb-<1&q>uot; < Se>t < Ver>bPO<ST/V>erb< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
उदाहरण 2
<Verb>
के कॉन्टेंट को मैसेज टेंप्लेट माना जाता है. इसका मतलब है कि कर्ली ब्रेसिज़ में रैप किए गए वैरिएबल के नाम को रनटाइम में, रेफ़र किए गए वैरिएबल की वैल्यू से बदल दिया जाएगा.
नीचे दिए गए उदाहरण में, किसी क्रिया को भरने के लिए वैरिएबल का इस्तेमाल किया गया है:
<AssignMessage name="AM-set-verb-to-dynamic-v>alu<e&q>uot; < Se>t Verb{my<_vari>abl<e}/V>erb< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
<Verb>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- मैसेज का टाइप: अनुरोध
<Version>
(<Set>
का बच्चा)
यह कुकी, अनुरोध पर एचटीटीपी वर्शन सेट करती है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.
डिफ़ॉल्ट वैल्यू | लागू नहीं |
ज़रूरी है? | वैकल्पिक |
समस्या | स्ट्रिंग या variable |
पैरंट एलिमेंट |
<Set>
|
चाइल्ड एलिमेंट | कोई नहीं |
<Version>
एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:
सिंटैक्स
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" > na<me=>"<;policy>_name" Set < Ve>rsi<on[1>.<0|1.1|{variabl>e}]/Verb /Set /AssignMessage
उदाहरण 1
यहां दिए गए उदाहरण में, वर्शन नंबर को "1.1" पर सेट किया गया है:
<AssignMessage name="AM-set-versi>on-<1&q>uot; < Set > <Version1>.1/<Vers>io<n /Set /Ass>ignMessage
उदाहरण 2
यहां कर्ली ब्रैकेट में वैरिएबल का इस्तेमाल करके, वर्शन नंबर सेट किया गया है:
<AssignMessage name="AM-set-versi>on-<2&q>uot; < Set > Version{m<y_versio>n}/<Vers>ion< /Set > Assig<nToreques>t</AssignTo /Ass>ignMessage
<Version>
के कॉन्टेंट को मैसेज टेंप्लेट माना जाता है. इसका मतलब है कि कर्ली ब्रेसिज़ में रैप किए गए वैरिएबल के नाम को रनटाइम में, रेफ़र किए गए वैरिएबल की वैल्यू से बदल दिया जाएगा.
<Version>
का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:
- मैसेज का टाइप: अनुरोध
अनुरोध के लिए कस्टम मैसेज बनाना
कस्टम अनुरोध मैसेज बनाने के लिए, AssignMessage नीति का इस्तेमाल किया जा सकता है. कस्टम अनुरोध बनाने के बाद, इसका इस्तेमाल इन तरीकों से किया जा सकता है:
- अन्य नीतियों में इसके वैरिएबल ऐक्सेस करना
- इसे किसी बाहरी सेवा को पास करें
कस्टम अनुरोध मैसेज बनाने के लिए, AssignMessage नीति में <AssignTo>
एलिमेंट का इस्तेमाल करें. createNew
को "true" पर सेट करें. साथ ही, एलिमेंट के मुख्य हिस्से में नए मैसेज का नाम डालें. उदाहरण के लिए:
<AssignMessage name="AM-assign>to-2<" AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo /AssignMessage
डिफ़ॉल्ट रूप से, Edge कस्टम अनुरोध मैसेज के साथ कुछ नहीं करता है. इसे बनाने के बाद, Edge ओरिजनल अनुरोध के साथ फ़्लो को जारी रखेगा. कस्टम अनुरोध का इस्तेमाल करने के लिए, अपनी प्रॉक्सी में ServiceCallout नीति जैसी कोई नीति जोड़ें. इससे कस्टम अनुरोध को किसी बाहरी सेवा पर भेजा जा सकेगा.
यहां दिए गए उदाहरणों में, कस्टम अनुरोध वाले मैसेज बनाए गए हैं:
उदाहरण 1
यहां दिए गए उदाहरण में, Assign Message की मदद से कस्टम अनुरोध ऑब्जेक्ट बनाया गया है:
<AssignMessage name="AssignMessa>ge-<3" AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;M>yCust<omReque>st/Ass<ignTo Copy Headers > <Header n>ame<=&quo>t;u<ser>-agen<t"/ > /Head<ers /Copy Set Que>ryParams QueryParam< name=">;addr<ess"{re>quest<.que>ryp<aram.>add<y}/Q>uer<yParam /QueryParams > VerbG<ET/Verb /Set IgnoreUnr>e<solvedVariable>sfalse /IgnoreUnresolvedVariables /AssignMessage
इस उदाहरण में:
- "MyCustomRequest" नाम का नया अनुरोध मैसेज ऑब्जेक्ट बनाता है.
- MyCustomRequest पर, यह नीति:
- यह कुकी, आने वाले अनुरोध से
user-agent
एचटीटीपी हेडर की वैल्यू को नए मैसेज में कॉपी करती है.<Copy>
,user-agent
फ़्लो वैरिएबल के लिए ऐब्सलूट रेफ़रंस का इस्तेमाल करता है. इसलिए,<Copy>
के लिएsource
एट्रिब्यूट की वैल्यू तय करने की ज़रूरत नहीं है. - यह कस्टम मैसेज पर
address
क्वेरी पैरामीटर को, आने वाले अनुरोध केaddy
क्वेरी पैरामीटर की वैल्यू पर सेट करता है. - इस विकल्प की मदद से, एचटीटीपी वर्ब को
GET
पर सेट किया जाता है.
- यह कुकी, आने वाले अनुरोध से
- इस कुकी से
<IgnoreUnresolvedVariables>
को "false" पर सेट किया जाता है. अगर<IgnoreUnresolvedVariables>
की वैल्यू "गलत है" पर सेट है और नीति जिस वैरिएबल को जोड़ने की कोशिश कर रही है वह मौजूद नहीं है, तो Edge, एपीआई फ़्लो में प्रोसेसिंग बंद कर देगा.
उदाहरण 2
यहां एक और उदाहरण दिया गया है. इसमें AssignMessage का इस्तेमाल करके, कस्टम अनुरोध ऑब्जेक्ट बनाने का तरीका बताया गया है:
<AssignMessage name="AssignMessa>ge-<2" AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;>partn<er.r>eque<st/As>signT<o Set VerbPOST/Verb >Payload< conten><tType=&qu>ot;<text/xml&q><uot; > re<questope>rat<ion1>0<5/operation/re>quest /Payload /Set /AssignMessage
इस उदाहरण में, "partner.request" नाम का एक नया कस्टम अनुरोध बनाया गया है. इसके बाद, यह कुकी नए अनुरोध पर <Verb>
और <Payload>
सेट करती है.
फ़्लो में बाद में लागू होने वाली AssignMessage नीति में, कस्टम अनुरोध मैसेज को ऐक्सेस किया जा सकता है. यहां दिए गए उदाहरण में, कस्टम अनुरोध मैसेज के user-agent
हेडर की वैल्यू मिलती है:
<AssignMessage name="custom-request-1-ac>ces<s" D>isplayNamecustom-reques<t-1-access/D>isp<layName > AssignTopartn<er.reques>t/A<ssi>gnTo < Set > Head<ers Header name="user-agentCop>yCustomRequest"{MyCustomReques<t.heade>r.use<r-agent}>/He<ader> < /Headers > /Set /AssignMessage
वीडियो
AssignMessage नीति के बारे में ज़्यादा जानने के लिए, यहां दिए गए वीडियो देखें.
वीडियो | ब्यौरा |
---|---|
मैसेज से जुड़ी नीति असाइन क्यों करें? | बैकएंड कोड में बदलाव किए बिना, एपीआई अनुरोध या जवाब में बदलाव करने के लिए, AssignMessage नीति का इस्तेमाल करने के फ़ायदों के बारे में जानें. |
AssignMessage नीति का इस्तेमाल करके, एपीआई एलिमेंट कॉपी करना | AssignMessage नीति का इस्तेमाल करके, एपीआई अनुरोध या जवाब से एलिमेंट कॉपी करें और नया अनुरोध या जवाब ऑब्जेक्ट बनाएं. |
AssignMessage नीति का इस्तेमाल करके, एपीआई एलिमेंट हटाना | AssignMessage नीति का इस्तेमाल करके, एपीआई एलिमेंट हटाएं और टारगेट बैकएंड तक पहुंचने से पहले एपीआई में बदलाव करें. |
AssignMessage नीति का इस्तेमाल करके, एपीआई एलिमेंट जोड़ना और सेट करना | AssignMessage नीति का इस्तेमाल करके, क्वेरी पैरामीटर, हेडर, फ़ॉर्म पैरामीटर या पेलोड जोड़कर, एपीआई अनुरोध या जवाब में बदलाव करें. |
AssignMessage नीति का इस्तेमाल करके कस्टम वैरिएबल बनाना | AssignMessage नीति का इस्तेमाल करके, कस्टम फ़्लो वैरिएबल सेट करें. साथ ही, एपीआई प्रॉक्सी में मौजूद अन्य नीतियों में वैरिएबल का फ़ायदा पाएं. |
AssignMessage नीति का इस्तेमाल करके, नए अनुरोध या जवाब ऑब्जेक्ट बनाना | एपीआई रनटाइम पर AssignMessage नीति का इस्तेमाल करके, नए एपीआई अनुरोध या जवाब ऑब्जेक्ट बनाएं. |
AssignMessage नीति का इस्तेमाल करके, मॉक एपीआई बनाना | रिस्पॉन्स फ़्लो में AssignMessage नीति जोड़कर, एक सामान्य मॉक REST API बनाएं. |
AssignMessage नीति का इस्तेमाल करके, पेलोड सेट करना या उसमें बदलाव करना | AssignMessage नीति का इस्तेमाल करके, REST अनुरोध को SOAP अनुरोध में बदलें. इसके लिए, एपीआई रनटाइम पर SOAP पेलोड सेट करें. |
गड़बड़ी के कोड
इस सेक्शन में, गड़बड़ी के कोड और गड़बड़ी के मैसेज के बारे में बताया गया है. साथ ही, इन गड़बड़ियों के वैरिएबल के बारे में भी बताया गया है, जो Edge की मदद से सेट किए जाते हैं. यह जानकारी जानना ज़रूरी है कि क्या आप गड़बड़ियों को ठीक करता है. ज़्यादा जानने के लिए, आपके लिए ज़रूरी जानकारी देखें नीति से जुड़ी गड़बड़ियों और हैंडलिंग के बारे में जानकारी गलतियां.
रनटाइम की गड़बड़ियां
नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.
गड़बड़ी कोड | एचटीटीपी कोड स्थिति | वजह | ठीक करें |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | नीति, वैरिएबल सेट नहीं कर सकी. नाम के लिए गड़बड़ी वाली स्ट्रिंग देखें वैरिएबल सेट न किए गए हों. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
यह गड़बड़ी तब होती है, जब मैसेज टाइप वैरिएबल, सभी एचटीटीपी अनुरोधों और जवाबों को दिखाते हैं. बिल्ट-इन Edge
फ़्लो वैरिएबल |
build |
steps.assignmessage.UnresolvedVariable |
500 |
यह गड़बड़ी तब होती है, जब मैसेज असाइन करें नीति में तय किया गया वैरिएबल:
|
build |
डिप्लॉयमेंट से जुड़ी गड़बड़ियां
ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाली प्रॉक्सी को डिप्लॉय किया जाता है.
गड़बड़ी का नाम | वजह | ठीक करें |
---|---|---|
InvalidIndex |
अगर 'असाइन करें' मैसेज के <Copy> और/या <Remove> एलिमेंट में इस इंडेक्स के बारे में बताया गया है
नीति शून्य या नेगेटिव संख्या है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता.
|
build |
InvalidVariableName |
अगर चाइल्ड एलिमेंट <Name> खाली है या <AssignVariable> एलिमेंट में नहीं बताया गया है, तो
तो API प्रॉक्सी का परिनियोजन विफल हो जाता है, क्योंकि
जिसे मान असाइन करना है. वैरिएबल का मान्य नाम डालना ज़रूरी है.
|
build |
InvalidPayload |
नीति में बताया गया पेलोड अमान्य है. |
गड़बड़ी के वैरिएबल
ये वैरिएबल तब सेट किए जाते हैं, जब यह नीति रनटाइम के दौरान कोई गड़बड़ी ट्रिगर करती है. ज़्यादा जानकारी के लिए, देखें आपको क्या नीति से जुड़ी गड़बड़ियों के बारे में जानकारी होनी चाहिए.
वैरिएबल | कहां | उदाहरण |
---|---|---|
fault.name="fault_name" |
fault_name गड़बड़ी का नाम है, जैसा कि ऊपर रनटाइम में गड़बड़ियां टेबल में बताया गया है. गड़बड़ी का नाम, गड़बड़ी के कोड का आखिरी हिस्सा होता है. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name, उपयोगकर्ता की ओर से बताया गया उस नीति का नाम है जिसमें गड़बड़ी हुई है. | assignmessage.AM-SetResponse.failed = true |
गड़बड़ी के रिस्पॉन्स का उदाहरण
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
गड़बड़ी के नियम का उदाहरण
<FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
स्कीमा
नीति के हर टाइप को एक्सएमएल स्कीमा (.xsd
) से तय किया जाता है. रेफ़रंस के लिए, नीति के स्कीमा GitHub पर उपलब्ध हैं.
मिलते-जुलते विषय
AssignMessage नीति के काम करने के सैंपल, API Platform के सैंपल में उपलब्ध हैं.
ProxyEndpoint से target.url
को बदलने के तरीके का ज़्यादा बेहतर उदाहरण देखने के लिए, Apigee कम्यूनिटी का यह लेख पढ़ें.
ServiceCallout नीति में "सेट पाथ" को ऐक्शन में देखने के लिए, Apigee GitHub के सैंपल में यह उदाहरण देखें और खुद करके सीखें. बस रिपॉज़िटरी को क्लोन करें और उस विषय में दिए गए निर्देशों का पालन करें. इस उदाहरण में, AssignMessage नीति का इस्तेमाल करके अनुरोध का पाथ सेट किया गया है. इसके बाद, Service Callout नीति का इस्तेमाल करके बाहरी सेवा से अनुरोध किया गया है.