असाइन मैसेज की नीति

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

क्या

AssignMessage नीति, एपीआई प्रॉक्सी फ़्लो के दौरान नए अनुरोध और जवाब वाले मैसेज बनाती है या उनमें बदलाव करती है. इस नीति के तहत, इन मैसेज पर ये कार्रवाइयां की जा सकती हैं:

  • किसी मैसेज में नए फ़ॉर्म पैरामीटर, हेडर या क्वेरी पैरामीटर जोड़ना
  • एक मैसेज से दूसरी मैसेज में मौजूदा प्रॉपर्टी कॉपी करना
  • किसी मैसेज से हेडर, क्वेरी पैरामीटर, फ़ॉर्म पैरामीटर, और/या मैसेज पेलोड हटाएं
  • किसी मैसेज में मौजूद प्रॉपर्टी की वैल्यू सेट करना

AssignMessage नीति की मदद से, आम तौर पर अनुरोध या जवाब की प्रॉपर्टी जोड़ी, बदली या हटाई जाती हैं. हालांकि, AssignMessage नीति का इस्तेमाल करके, कस्टम अनुरोध या जवाब का मैसेज बनाया जा सकता है. साथ ही, इसे किसी अन्य टारगेट को भेजा जा सकता है. इसके बारे में कस्टम अनुरोध के मैसेज बनाना लेख में बताया गया है.

कई बार ऐसा हो सकता है कि आपको Apigee Edge की प्रोसेसिंग के दौरान, किसी अनुरोध या जवाब के मैसेज में बदलाव करना पड़े. उदाहरण के लिए:

  • क्वेरी स्ट्रिंग पैरामीटर या किसी अन्य तरह के इनपुट के लिए डिफ़ॉल्ट वैल्यू तय करें.
  • अनुरोध के मैसेज को बैकएंड सेवा पर फ़ॉरवर्ड करने से पहले, उसमें से एचटीटीपी हेडर हटा दें.
  • उपयोगकर्ता के ऐप्लिकेशन को रिस्पॉन्स भेजने से पहले, एचटीटीपी हेडर जोड़ें.
  • जवाब भेजने से पहले, JSON या XML मैसेज का कॉन्टेंट डालें.
  • पूरे अनुरोध या जवाब वाले मैसेज जनरेट करना. उदाहरण के लिए, एपीआई प्रॉक्सी से रिमोट एपीआई को शुरू करने के लिए, ServiceCallout नीति का इस्तेमाल किया जा सकता है. AssignMessage नीति का इस्तेमाल करके, कस्टम अनुरोध मैसेज बनाया जा सकता है और उसे किसी वैरिएबल को असाइन किया जा सकता है. इसके बाद, Service Callout का इस्तेमाल करके, उस मैसेज को रिमोट एपीआई पर भेजें.
  • डीबग करने और समस्या हल करने के लिए, अनुरोधों और जवाबों में हेडर जोड़ें.

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 लागू नहीं ज़रूरी

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

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

continueOnError गलत ज़रूरी नहीं नीति के काम न करने पर गड़बड़ी दिखाने के लिए, "गलत" पर सेट करें. ज़्यादातर नीतियों के लिए इस तरीके का इस्तेमाल किया जाना चाहिए. नीति लागू न होने के बाद भी फ़्लो चलाने के लिए, "सही" पर सेट करें.
enabled सही ज़रूरी नहीं नीति लागू करने के लिए, "सही" पर सेट करें. नीति को "बंद" करने के लिए "गलत" पर सेट करें. अगर नीति किसी फ़्लो से जुड़ी हुई हो, तो भी उसे लागू नहीं किया जाएगा.
async   गलत बहिष्कृत इस एट्रिब्यूट के इस्तेमाल पर रोक लगा दी गई है.

यहां दी गई टेबल में, <AssignMessage> के चाइल्ड एलिमेंट के बारे में खास जानकारी दी गई है:

चाइल्ड एलिमेंट ज़रूरी है? ब्यौरा
सामान्य कार्रवाइयां
<Add> वैकल्पिक यह को मैसेज ऑब्जेक्ट में जानकारी जोड़ता है. यह ऑब्जेक्ट, <AssignTo> एलिमेंट से तय होता है.

<Add> मैसेज में ऐसे हेडर या पैरामीटर जोड़ता है जो मूल मैसेज में मौजूद नहीं हैं. मौजूदा हेडर या पैरामीटर को बदलने के लिए, <Set> एलिमेंट का इस्तेमाल करें.

<Copy> वैकल्पिक यह एट्रिब्यूट, source एट्रिब्यूट से तय किए गए मैसेज से, <AssignTo> एलिमेंट से तय किए गए मैसेज ऑब्जेक्ट तक जानकारी कॉपी करता है.
<Remove> वैकल्पिक यह फ़ंक्शन, <AssignTo> एलिमेंट में दिए गए मैसेज वैरिएबल से, तय किए गए एलिमेंट मिटाता है.
<Set> वैकल्पिक यह अनुरोध या जवाब में मौजूद प्रॉपर्टी की वैल्यू बदलता है. यह वैल्यू, <AssignTo> एलिमेंट से तय की जाती है.

<Set> ओरिजनल मैसेज में पहले से मौजूद हेडर या पैरामीटर को बदल देता है. नए हेडर या पैरामीटर जोड़ने के लिए, <Add> एलिमेंट का इस्तेमाल करें.

अन्य चाइल्ड एलिमेंट
<AssignTo> वैकल्पिक यह तय करता है कि AssignMessage नीति किस मैसेज पर लागू होगी. यह स्टैंडर्ड अनुरोध या जवाब हो सकता है. इसके अलावा, यह कोई नया, कस्टम मैसेज भी हो सकता है.
<AssignVariable> वैकल्पिक यह फ़्लो वैरिएबल को वैल्यू असाइन करता है. अगर वैरिएबल मौजूद नहीं है, तो <AssignVariable> उसे बनाता है.
<IgnoreUnresolvedVariables> वैकल्पिक यह कुकी तय करती है कि किसी ऐसे वैरिएबल का सामना होने पर प्रोसेसिंग बंद हो जाएगी या नहीं जिसे हल नहीं किया जा सका है.

इनमें से हर चाइल्ड एलिमेंट के बारे में, यहां दिए गए सेक्शन में बताया गया है.

उदाहरण

यहां AssignMessage नीति को इस्तेमाल करने के कुछ उदाहरण दिए गए हैं:

इस उदाहरण में, <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>

यहां दिए गए उदाहरण में, <Remove> एलिमेंट की मदद से, रिस्पॉन्स से पेलोड को मिटाया गया है:

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

इस उदाहरण में, मौजूदा रिस्पॉन्स ऑब्जेक्ट में हेडर जोड़कर उसे बदला गया है:

<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 नीति के ज़रिए बदले गए रिस्पॉन्स मैसेज में एक एचटीटीपी हेडर होता है. इससे पता चलता है कि नतीजे कैश मेमोरी से लिए गए हैं या नहीं. रिस्पॉन्स में हेडर सेट करने से, डीबग करने और समस्या हल करने में मदद मिल सकती है.

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 से, वैरिएबल डालने के लिए कर्ली ब्रेसिज़ का भी इस्तेमाल किया जा सकता है.

यहां दिए गए उदाहरण में, अनुरोध से apikey क्वेरी पैरामीटर को हटाया गया है:

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

इस उदाहरण में, Assign Message की तीन नीतियों का इस्तेमाल किया गया है:

  1. यह अनुरोध में तीन फ़्लो वैरिएबल बनाता है. इनकी वैल्यू स्टैटिक होती हैं
  2. अनुरोध फ़्लो में दूसरी नीति में फ़्लो वैरिएबल को डाइनैमिक तरीके से सेट करता है
  3. यह कुकी, रिस्पॉन्स के पेलोड में सेट होती है
<!-- 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. अनुरोध फ़्लो में नीतियां #1 और #2 जोड़ें. नीति #1 को नीति #2 से पहले रखना न भूलें.
  2. जवाब के फ़्लो में तीसरी नीति जोड़ें.
  3. तीसरी नीति में, जवाब में वैरिएबल जोड़ने के लिए <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" पर सेट करना न भूलें.

  4. अपनी एपीआई प्रॉक्सी को एक अनुरोध भेजें. उदाहरण के लिए:
    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>

यहां दिए गए उदाहरण में, मान लें कि एपीआई प्रॉक्सी अनुरोध में 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>

इस उदाहरण में, अनुरोध में स्टैटिक वैल्यू के साथ एक क्वेरी पैरामीटर जोड़ने के लिए, <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>

इस उदाहरण में, अनुरोध में एक फ़ॉर्म पैरामीटर ("answer") और एक स्टैटिक वैल्यू ("42") जोड़ी गई है:

<AssignMessage name="AM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

यहां दिए गए उदाहरण में, name क्वेरी पैरामीटर की वैल्यू मिलती है. साथ ही, इसे फ़ॉर्म पैरामीटर के तौर पर अनुरोध में जोड़ा जाता है. इसके बाद, क्वेरी पैरामीटर को हटा दिया जाता है:

<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</AssignMessage>

ध्यान दें कि इस उदाहरण में, <AssignTo> के साथ टारगेट तय नहीं किया गया है. यह नीति, अनुरोध में सिर्फ़ पैरामीटर जोड़ती है.

यहां दिए गए उदाहरण में, अनुरोध में कई फ़ॉर्म पैरामीटर जोड़े गए हैं:

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

इस उदाहरण में, अनुरोध के मैसेज में 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>

यहां दिए गए उदाहरण में, अनुरोध में "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>

यहां दिए गए उदाहरण में बताया गया है कि टारगेट, वह ओरिजनल अनुरोध है जिसे टारगेट एंडपॉइंट पर भेजा जाएगा:

<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 नीति के साथ नए अनुरोध ऑब्जेक्ट को किसी बाहरी सेवा पर भेजा जा सकता है.

यहां दिए गए उदाहरण में, "MyRequestObject" नाम का एक नया अनुरोध ऑब्जेक्ट बनाया गया है:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

नया अनुरोध या जवाब ऑब्जेक्ट बनाते समय, AssignMessage नीति के अन्य एलिमेंट (जैसे कि <Add>, <Set>, और <Copy>) उस नए अनुरोध ऑब्जेक्ट पर काम करते हैं.

बाद में फ़्लो में, अन्य नीतियों में नए अनुरोध ऑब्जेक्ट को ऐक्सेस किया जा सकता है. इसके अलावा, ServiceCallout नीति के साथ नए अनुरोध ऑब्जेक्ट को किसी बाहरी सेवा पर भेजा जा सकता है.

यहां दी गई टेबल में, <AssignTo> एट्रिब्यूट के बारे में बताया गया है:

एट्रिब्यूट ब्यौरा ज़रूरी है? टाइप
createNew

इससे यह तय होता है कि वैल्यू असाइन करते समय, यह नीति नया मैसेज बनाती है या नहीं.

अगर वैल्यू "true" है, तो नीति type में बताए गए टाइप का एक नया वैरिएबल बनाती है. यह "request" या "response" में से कोई एक हो सकता है. अगर आपने नए वैरिएबल का नाम नहीं बताया है, तो नीति type की वैल्यू के आधार पर, नया अनुरोध या जवाब ऑब्जेक्ट बनाती है.

अगर "false" है, तो नीति इनमें से किसी एक तरीके से जवाब देती है:

  • अगर <AssignTo>, अनुरोध या जवाब के लिए वैरिएबल के नाम का इस्तेमाल कर सकता है, तो वह प्रोसेस जारी रखता है. उदाहरण के लिए, अगर नीति अनुरोध फ़्लो में है, तो वैरिएबल अनुरोध ऑब्जेक्ट होता है. अगर नीति किसी रिस्पॉन्स में है, तो वैरिएबल, रिस्पॉन्स ऑब्जेक्ट होता है.
  • अगर <AssignTo> को हल नहीं किया जा सकता या यह किसी मैसेज टाइप में नहीं बदलता है, तो नीति के उल्लंघन की गड़बड़ी दिखती है.

अगर createNew को सेट नहीं किया जाता है, तो नीति इनमें से किसी एक तरीके से जवाब देती है:

  • अगर <AssignTo> की टेक्स्ट वैल्यू से कोई मैसेज मिलता है, तो प्रोसेसिंग अगले चरण पर चली जाती है.
  • अगर <AssignTo> की टेक्स्ट वैल्यू को हल नहीं किया जा सकता या वह मैसेज टाइप नहीं है, तो type में बताए गए टाइप का एक नया वैरिएबल बनाया जाता है.
वैकल्पिक बूलियन
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]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

सोर्स वैरिएबल तय करने के लिए, <Ref> एलिमेंट का इस्तेमाल करें. अगर <Ref> से रेफ़र किया गया वैरिएबल ऐक्सेस नहीं किया जा सकता, तो Edge, <Value> एलिमेंट से तय की गई वैल्यू का इस्तेमाल करता है. अगर आपने <Template> को तय किया है, तो इसे अन्य चाइल्ड एलिमेंट के मुकाबले प्राथमिकता दी जाएगी.

यहां दिए गए उदाहरण में, नए वैरिएबल myvar की वैल्यू को लिटरल वैल्यू "42" पर सेट किया गया है:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

यहां दिए गए उदाहरण में, फ़्लो वैरिएबल request.header.user-agent की वैल्यू को डेस्टिनेशन फ़्लो वैरिएबल myvar को असाइन किया गया है. साथ ही, क्वेरी पैरामीटर country की वैल्यू को डेस्टिनेशन फ़्लो वैरिएबल Country को असाइन किया गया है:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

अगर दोनों में से कोई भी असाइनमेंट पूरा नहीं होता है, तो Edge, डेस्टिनेशन फ़्लो वैरिएबल को "ErrorOnCopy" वैल्यू असाइन करता है.

अगर myvar या Country फ़्लो वैरिएबल मौजूद नहीं हैं, तो <AssignVariable> उन्हें बनाता है.

यहां दिए गए उदाहरण में, <Template> चाइल्ड एलिमेंट का इस्तेमाल किया गया है. इससे दो कॉन्टेक्स्ट वैरिएबल को एक साथ जोड़ा जा सकता है. इनके बीच में लिटरल स्ट्रिंग (हाइफ़न) होती है:

<AssignMessage name='AV-via-template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<AssignVariable> का इस्तेमाल आम तौर पर, क्वेरी पैरामीटर, हेडर या ऐसी अन्य वैल्यू के लिए डिफ़ॉल्ट वैल्यू सेट करने के लिए किया जाता है जिसे अनुरोध के साथ पास किया जा सकता है. इसके लिए, <Ref> और <Value> चाइल्ड एलिमेंट, दोनों का इस्तेमाल किया जाता है. ज़्यादा जानकारी के लिए, <Ref> के उदाहरण देखें.

<Name> (<AssignVariable> का बच्चा)

यह डेस्टिनेशन फ़्लो वैरिएबल का नाम तय करता है. उदाहरण के लिए, वह वैरिएबल जिसकी वैल्यू AssignMessage नीति से सेट की जाती है. अगर <AssignVariable> में दिया गया वैरिएबल मौजूद नहीं है, तो नीति उस नाम का वैरिएबल बना देती है.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? ज़रूरी है
समस्या स्ट्रिंग
पैरंट एलिमेंट <AssignVariable>
चाइल्ड एलिमेंट कोई नहीं

<Name> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

यहां दिए गए उदाहरण में, डेस्टिनेशन वैरिएबल को myvar के तौर पर दिखाया गया है. साथ ही, इसे "42" के तौर पर सेट किया गया है:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

अगर 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]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

इस उदाहरण में, फ़्लो वैरिएबल request.header.user-agent की वैल्यू को डेस्टिनेशन फ़्लो वैरिएबल myvar को असाइन किया गया है. साथ ही, क्वेरी पैरामीटर country की वैल्यू को Country वैरिएबल को असाइन किया गया है:

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

इस उदाहरण में, Edge के पास किसी भी असाइनमेंट के लिए डिफ़ॉल्ट (या फ़ॉलबैक वैल्यू) तय नहीं की गई है.

यहां दिए गए उदाहरण में, फ़्लो वैरिएबल request.header.user-agent की वैल्यू को डेस्टिनेशन फ़्लो वैरिएबल myvar को असाइन किया गया है. साथ ही, क्वेरी पैरामीटर country की वैल्यू को Country वैरिएबल को असाइन किया गया है:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

इस उदाहरण में, अगर request.header.user-agent फ़्लो वैरिएबल या Country क्वेरी पैरामीटर की वैल्यू शून्य है, पढ़ी नहीं जा सकती या गलत तरीके से बनाई गई है, तो Edge नए वैरिएबल को "ErrorOnCopy" वैल्यू असाइन करता है.

<AssignVariable> का इस्तेमाल आम तौर पर, क्वेरी पैरामीटर, हेडर या अनुरोध के साथ पास की जा सकने वाली किसी अन्य वैल्यू की डिफ़ॉल्ट वैल्यू सेट करने के लिए किया जाता है. उदाहरण के लिए, आपने एक मौसम एपीआई प्रॉक्सी बनाई है. इसमें अनुरोध, "w" नाम का एक क्वेरी पैरामीटर लेता है. इस पैरामीटर में उस शहर का आईडी होता है जिसके लिए आपको मौसम की जानकारी चाहिए. अनुरोध किए गए यूआरएल का फ़ॉर्मैट यह है:

http://myCO.com/v1/weather/forecastrss?w=city_ID

"w" के लिए डिफ़ॉल्ट वैल्यू तय करने के लिए, AssignMessage नीति बनाएं. जैसे, यहां दी गई नीति:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</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]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

इस उदाहरण में, मैसेज टेंप्लेटिंग सिंटैक्स का इस्तेमाल करके, दो कॉन्टेक्स्ट वैरिएबल को एक साथ जोड़ा गया है. इनके बीच में लिटरल स्ट्रिंग (हाइफ़न) का इस्तेमाल किया गया है:

<AssignMessage name='AV-via-template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

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

<AssignMessage name='AV-via-template-indirectly'>  
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>
  </AssignVariable>
</AssignMessage>

इस उदाहरण में, फ़्लो वैरिएबल और टेक्स्ट वैल्यू के बारे में बताया गया है. इस मामले में, अगर रेफ़र किया गया वैरिएबल शून्य नहीं है, तो उस वैल्यू का इस्तेमाल टेंप्लेट के तौर पर किया जाता है. अगर रेफ़र की गई वैल्यू शून्य है, तो टेक्स्ट वैल्यू (इस मामले में, {system.uuid}-{messageid}) को टेंप्लेट के तौर पर इस्तेमाल किया जाता है. यह पैटर्न, "बदली गई" वैल्यू देने के लिए काम आता है. कुछ मामलों में, आपको डिफ़ॉल्ट टेंप्लेट (टेक्स्ट वाला हिस्सा) को ऐसी वैल्यू से बदलना होता है जो डाइनैमिक तौर पर सेट की जाती हैं. उदाहरण के लिए, शर्त के साथ इस्तेमाल किया जाने वाला कोई स्टेटमेंट, की-वैल्यू मैप से कोई वैल्यू ले सकता है और रेफ़रंस किए गए वैरिएबल को उस वैल्यू पर सेट कर सकता है:

<AssignMessage name='AV-template-with-fallback'> 
 <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (<AssignVariable> का बच्चा)

यह <AssignVariable> की मदद से सेट किए गए डेस्टिनेशन फ़्लो वैरिएबल की वैल्यू तय करता है. वैल्यू को हमेशा लिटरल स्ट्रिंग के तौर पर समझा जाता है. वैल्यू के तौर पर फ़्लो वैरिएबल का इस्तेमाल नहीं किया जा सकता. भले ही, आपने वैल्यू को ब्रैकेट ("{}") में रैप किया हो. फ़्लो वैरिएबल का इस्तेमाल करने के लिए, <Ref> का इस्तेमाल करें.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या स्ट्रिंग
पैरंट एलिमेंट <AssignVariable>
चाइल्ड एलिमेंट कोई नहीं

<Ref> एलिमेंट के साथ इस्तेमाल करने पर, <Value> डिफ़ॉल्ट (या फ़ॉलबैक) वैल्यू के तौर पर काम करता है. अगर <Ref> की वैल्यू नहीं दी गई है, तय नहीं की जा सकती या शून्य है, तो <Value> की वैल्यू का इस्तेमाल किया जाता है.

<Value> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

यहां दिए गए उदाहरण में, डेस्टिनेशन फ़्लो वैरिएबल myvar की वैल्यू को लिटरल वैल्यू "42" पर सेट किया गया है:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

इस उदाहरण में, फ़्लो वैरिएबल request.header.user-agent की वैल्यू को फ़्लो वैरिएबल myvar को असाइन किया गया है. साथ ही, क्वेरी पैरामीटर country की वैल्यू को Country वैरिएबल को असाइन किया गया है:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

अगर दोनों में से कोई भी असाइनमेंट पूरा नहीं होता है, तो <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" >
    <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>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

यहां दिए गए उदाहरण में, request मैसेज से हेडर, तीन फ़ॉर्म पैरामीटर, पाथ, और सभी क्वेरी पैरामीटर को newRequest नाम के नए कस्टम अनुरोध में कॉपी किया गया है:

<AssignMessage name="AM-copy-1">
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1"/>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1"/>
      <FormParam name="Form_Param_Name_2"/>
      <FormParam name="Form_Param_Name_3"/>
    </FormParams>
    <Path>true</Path>
    <QueryParams/>
  </Copy>
</AssignMessage>

<Payload> और <Verb> जैसे एलिमेंट मौजूद न होने की वजह से, नीति मैसेज के उन हिस्सों को कॉपी नहीं करती है.

यहां दिए गए उदाहरण में, सबसे पहले मौजूदा response मैसेज में मौजूद सभी आइटम हटाए जाते हैं. इसके बाद, secondResponse नाम के किसी दूसरे मैसेज से सभी वैल्यू कॉपी करके, response मैसेज में डाली जाती हैं:

<AssignMessage name='AM-Copy-Response'>
  <AssignTo createNew="false" transport="http" type="response">response</AssignTo>
  <!-- first remove any existing values -->
  <Remove/>
  <!-- then copy everything from the designated message -->
  <Copy source="secondResponse"/>
</AssignMessage>

<Copy> एलिमेंट में सिर्फ़ एक एट्रिब्यूट होता है:

एट्रिब्यूट ब्यौरा ज़रूरी है? टाइप
source

इससे कॉपी किए गए सोर्स ऑब्जेक्ट के बारे में पता चलता है.

  • अगर source नहीं दिया गया है, तो यह डिफ़ॉल्ट रूप से message पर सेट होता है. इसकी वैल्यू, उस फ़्लो के हिसाब से अलग-अलग होती है जिसमें नीति लागू होती है. अगर नीति, अनुरोध फ़्लो में लागू होती है, तो message वैरिएबल, request ऑब्जेक्ट को दिखाता है. अगर नीति, रिस्पॉन्स फ़्लो में लागू होती है, तो message वैरिएबल, response ऑब्जेक्ट को रेफ़र करता है.
  • अगर सोर्स वैरिएबल को हल नहीं किया जा सकता या वह मैसेज टाइप का नहीं है, तो <Copy> जवाब नहीं देता है.
वैकल्पिक स्ट्रिंग

<FormParams> (<Copy> का बच्चा)

यह <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए अनुरोध से, फ़ॉर्म पैरामीटर को से <AssignTo> एलिमेंट से तय किए गए अनुरोध में कॉपी करता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या <FormParam> एलिमेंट की कैटगरी या खाली कैटगरी
पैरंट एलिमेंट <Copy>
चाइल्ड एलिमेंट <FormParam>

<FormParams> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

यहां दिए गए उदाहरण में, अनुरोध से एक फ़ॉर्म पैरामीटर को "MyCustomRequest" कस्टम अनुरोध में कॉपी किया गया है:

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

यहां दिए गए उदाहरण में, फ़ॉर्म के सभी पैरामीटर को कस्टम अनुरोध "MyCustomRequest" में कॉपी किया गया है:

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

यहां दिए गए उदाहरण में, तीन फ़ॉर्म पैरामीटर को कस्टम अनुरोध "MyCustomRequest" में कॉपी किया गया है:

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

अगर एक ही नाम वाले कई फ़ॉर्म पैरामीटर हैं, तो इस सिंटैक्स का इस्तेमाल करें:

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" 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]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

यहां दिए गए उदाहरण में, अनुरोध से user-agent हेडर को नए, कस्टम अनुरोध ऑब्जेक्ट में कॉपी किया गया है:

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

सभी हेडर कॉपी करने के लिए, खाली <Headers> एलिमेंट का इस्तेमाल करें. यहां दिए गए उदाहरण में दिखाया गया है कि ऐसा कैसे किया जाता है:

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

अगर एक ही नाम वाले कई हेडर मौजूद हैं, तो इस सिंटैक्स का इस्तेमाल करें:

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" 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]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

यहां दिए गए उदाहरण से पता चलता है कि AssignMessage नीति को, सोर्स अनुरोध से पाथ को कॉपी करके नए, कस्टम अनुरोध ऑब्जेक्ट में डालना चाहिए:

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

<Path> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:

  • मैसेज का टाइप: अनुरोध

<Payload> (<Copy> का बच्चा)

इससे यह तय होता है कि पेलोड को सोर्स से डेस्टिनेशन पर कॉपी किया जाना चाहिए या नहीं. सोर्स और डेस्टिनेशन, अनुरोध या जवाब हो सकते हैं.

अगर इस नीति को "true" पर सेट किया जाता है, तो यह नीति, <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए मैसेज से पेलोड को कॉपी करके, <AssignTo> एलिमेंट से तय किए गए मैसेज में चिपकाती है.

डिफ़ॉल्ट वैल्यू गलत
ज़रूरी है? वैकल्पिक
समस्या बूलियन
पैरंट एलिमेंट <Copy>
चाइल्ड एलिमेंट कोई नहीं

<Payload> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

यहां दिए गए उदाहरण में, <Payload> को "true" पर सेट किया गया है, ताकि अनुरोध के पेलोड को अनुरोध से जवाब में कॉपी किया जा सके:

<AssignMessage name="AM-copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo>response</AssignTo>
</AssignMessage>

<QueryParams> (<Copy> का बच्चा)

यह क्वेरी स्ट्रिंग पैरामीटर को, <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए अनुरोध से, <AssignTo> एलिमेंट से तय किए गए अनुरोध तक कॉपी करता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या <QueryParam> एलिमेंट की कैटगरी या खाली कैटगरी
पैरंट एलिमेंट <QueryParam>
चाइल्ड एलिमेंट कोई नहीं

<QueryParams> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

इस उदाहरण में, अनुरोध से "my_param" क्वेरी पैरामीटर को कॉपी करके, नए कस्टम अनुरोध ऑब्जेक्ट में डाला गया है:

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

इस उदाहरण में, अनुरोध के सभी क्वेरी पैरामीटर को नए कस्टम अनुरोध ऑब्जेक्ट में कॉपी किया गया है:

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

अगर एक ही नाम वाले कई क्वेरी पैरामीटर हैं, तो इस सिंटैक्स का इस्तेमाल करें:

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" 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]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

यहां दिए गए उदाहरण में, <ReasonPhrase> को true पर सेट करने का तरीका बताया गया है. सोर्स और <AssignTo> एलिमेंट के बारे में बताई गई जानकारी के हिसाब से, <Copy>, नाम वाले रिस्पॉन्स मैसेज से response ऑब्जेक्ट में वजह वाला वाक्यांश कॉपी करता है:

<AssignMessage name="AM-copy-reasonphrase-1">
  <Copy source="serviceCalloutResponse">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo>response</AssignTo>
</AssignMessage>

<ReasonPhrase> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब सोर्स और डेस्टिनेशन मैसेज, रिस्पॉन्स टाइप के हों.

<StatusCode> (<Copy> का बच्चा)

इस कुकी से यह तय होता है कि स्टेटस कोड को सोर्स रिस्पॉन्स से डेस्टिनेशन रिस्पॉन्स में कॉपी किया गया है या नहीं. इस एलिमेंट का अनुरोध पर कोई असर नहीं पड़ता.

अगर "true" है, तो यह नीति, <Copy> एलिमेंट के source एट्रिब्यूट से तय किए गए रिस्पॉन्स मैसेज से, स्टेटस कोड को <AssignTo> एलिमेंट से तय किए गए रिस्पॉन्स मैसेज में कॉपी करती है.

डिफ़ॉल्ट वैल्यू गलत
ज़रूरी है? वैकल्पिक
समस्या बूलियन
पैरंट एलिमेंट <Copy>
चाइल्ड एलिमेंट कोई नहीं

<StatusCode> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

यहां दिए गए उदाहरण में, <StatusCode> को "true" पर सेट किया गया है. इससे स्टेटस कोड, डिफ़ॉल्ट रिस्पॉन्स ऑब्जेक्ट से नए, कस्टम रिस्पॉन्स ऑब्जेक्ट में कॉपी हो जाता है:

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

<StatusCode> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब सोर्स और डेस्टिनेशन मैसेज, रिस्पॉन्स टाइप के हों.

<StatusCode> का इस्तेमाल आम तौर पर, प्रॉक्सी रिस्पॉन्स स्टेटस कोड को टारगेट से मिले कोड से अलग वैल्यू पर सेट करने के लिए किया जाता है.

<Verb> (<Copy> का बच्चा)

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

अगर "true" है, तो <Copy> एलिमेंट के source एट्रिब्यूट में मौजूद क्रिया को <AssignTo> एलिमेंट में दिए गए अनुरोध में कॉपी करता है.

डिफ़ॉल्ट वैल्यू गलत
ज़रूरी है? वैकल्पिक
समस्या बूलियन
पैरंट एलिमेंट <Copy>
चाइल्ड एलिमेंट कोई नहीं

<Verb> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

नीचे दिए गए उदाहरण में, <Verb> को "true" पर सेट किया गया है. इससे डिफ़ॉल्ट अनुरोध से वर्ब को नए, कस्टम अनुरोध में कॉपी किया जाता है:

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

<Verb> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:

  • मैसेज का टाइप: अनुरोध

<Version> (<Copy> का बच्चा)

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

अगर "true" पर सेट है, तो <Copy> एलिमेंट के source एट्रिब्यूट में मौजूद एचटीटीपी वर्शन को, <AssignTo> एलिमेंट से तय किए गए ऑब्जेक्ट में कॉपी करता है.

डिफ़ॉल्ट वैल्यू गलत
ज़रूरी है? वैकल्पिक
समस्या बूलियन
पैरंट एलिमेंट <Copy>
चाइल्ड एलिमेंट कोई नहीं

<Version> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

इस उदाहरण में, अनुरोध पर <Version> को "true" पर सेट किया गया है. इससे डिफ़ॉल्ट अनुरोध ऑब्जेक्ट से वर्शन को नए, कस्टम अनुरोध ऑब्जेक्ट में कॉपी किया जाता है:

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">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]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]
  </IgnoreUnresolvedVariables>
</AssignMessage>

यहां दिए गए उदाहरण में, <IgnoreUnresolvedVariables> को "सही" पर सेट करने का तरीका बताया गया है:

<AssignMessage name="AM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
</AssignMessage>

<IgnoreUnresolvedVariables> को true पर सेट किया गया है. इसलिए, अगर possibly-defined-variable वैरिएबल को तय नहीं किया जाता है, तो यह नीति कोई गड़बड़ी नहीं दिखाएगी.

<Remove>

यह कुकी, किसी मैसेज से हेडर, क्वेरी पैरामीटर, फ़ॉर्म पैरामीटर, और/या मैसेज पेलोड को हटाती है. यह मैसेज, अनुरोध या जवाब हो सकता है. <AssignTo> एलिमेंट का इस्तेमाल करके, यह तय किया जाता है कि <Remove> किस मैसेज पर कार्रवाई करेगा.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या कॉम्प्लेक्स टाइप
पैरंट एलिमेंट <AssignMessage>
चाइल्ड एलिमेंट <FormParams>
<Headers>
<Payload>
<QueryParams>

<Remove> का इस्तेमाल आम तौर पर, क्वेरी पैरामीटर या हेडर को मिटाने के लिए किया जाता है. इसमें आने वाले अनुरोध ऑब्जेक्ट से संवेदनशील जानकारी होती है, ताकि इसे बैकएंड सर्वर को न भेजा जा सके.

<Remove> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <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>
</AssignMessage>

इस उदाहरण में, जवाब से मैसेज का मुख्य हिस्सा हटाया गया है:

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

जवाब के फ़्लो में, यह नीति जवाब के मुख्य हिस्से को हटा देती है. साथ ही, क्लाइंट को सिर्फ़ एचटीटीपी हेडर दिखाती है.

यहां दिए गए उदाहरण में, request ऑब्जेक्ट से सभी फ़ॉर्म पैरामीटर और क्वेरी पैरामीटर हटाए गए हैं:

<AssignMessage name="AM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

यहां दिए गए उदाहरण में, मैसेज ऑब्जेक्ट से सभी चीज़ें हटाई गई हैं:

<AssignMessage name="AM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</AssignMessage>

आम तौर पर, ऐसा सिर्फ़ तब किया जाता है, जब आपको मैसेज में कुछ बदली गई वैल्यू सेट करने के लिए, <Set> एलिमेंट या <Copy> एलिमेंट का इस्तेमाल करना हो.

<FormParams> (<Remove> का बच्चा)

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

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या <FormParam> एलिमेंट की कैटगरी या खाली कैटगरी
पैरंट एलिमेंट <Remove>
चाइल्ड एलिमेंट <FormParam>

<FormParams> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

यहां दिए गए उदाहरण में, अनुरोध से तीन फ़ॉर्म पैरामीटर हटाए गए हैं:

<AssignMessage name="AM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

यहां दिए गए उदाहरण में, अनुरोध से सभी फ़ॉर्म पैरामीटर हटा दिए गए हैं:

<AssignMessage name="AM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

अगर एक ही नाम वाले कई फ़ॉर्म पैरामीटर हैं, तो इस सिंटैक्स का इस्तेमाल करें:

<AssignMessage name="AM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</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]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

यहां दिए गए उदाहरण में, अनुरोध से user-agent हेडर को हटाया गया है:

<AssignMessage name="AM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

यहां दिए गए उदाहरण में, अनुरोध से सभी हेडर हटाए गए हैं:

<AssignMessage name="AM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

अगर एक ही नाम वाले कई हेडर मौजूद हैं, तो इस सिंटैक्स का इस्तेमाल करें:

<AssignMessage name="AM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

इस उदाहरण में, अनुरोध से "h1", "h2", और "h3" की दूसरी वैल्यू को हटाया गया है. अगर "h3" में सिर्फ़ एक वैल्यू है, तो उसे नहीं हटाया जाता.

<Payload> (<Remove> का बच्चा)

यह कुकी तय करती है कि <Remove>, अनुरोध या जवाब में मौजूद पेलोड को मिटाता है या नहीं. यह पेलोड, <AssignTo> एलिमेंट से तय होता है. पे लोड को मिटाने के लिए, इसे "सही" पर सेट करें. ऐसा न करने पर, इसे "गलत" पर सेट करें. डिफ़ॉल्ट वैल्यू "false" होती है.

डिफ़ॉल्ट वैल्यू गलत
ज़रूरी है? वैकल्पिक
समस्या बूलियन
पैरंट एलिमेंट <Remove>
चाइल्ड एलिमेंट कोई नहीं

<Payload> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

यहां दिए गए उदाहरण में, <Payload> को "true" पर सेट किया गया है, ताकि अनुरोध पेलोड को मिटाया जा सके:

<AssignMessage name="AM-remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

<QueryParams> (<Remove> का बच्चा)

यह फ़ंक्शन, अनुरोध से तय किए गए क्वेरी पैरामीटर हटाता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या <QueryParam> एलिमेंट की कैटगरी या खाली कैटगरी
पैरंट एलिमेंट <Remove>
चाइल्ड एलिमेंट <QueryParam>

<QueryParams> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

यहां दिए गए उदाहरण में, अनुरोध से एक क्वेरी पैरामीटर हटाया गया है:

<AssignMessage name="AM-remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

यहां दिए गए उदाहरण में, अनुरोध से सभी क्वेरी पैरामीटर हटा दिए गए हैं:

<AssignMessage name="AM-remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

अगर एक ही नाम वाले कई क्वेरी पैरामीटर हैं, तो इस सिंटैक्स का इस्तेमाल करें:

<AssignMessage name="AM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

इस उदाहरण में, अनुरोध से "qp1", "qp2", और "qp3" की दूसरी वैल्यू को हटाया गया है. अगर "qp3" की सिर्फ़ एक वैल्यू है, तो उसे नहीं हटाया जाएगा.

यहां दिए गए उदाहरण में, अनुरोध से apikey क्वेरी पैरामीटर को हटाया गया है:

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</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]"
    name="policy_name" >
  <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>

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

<AssignMessage name="AM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

यहां दिए गए उदाहरण में, रिस्पॉन्स के पेलोड के साथ-साथ Content-Type हेडर को भी बदला गया है.

<AssignMessage name="AM-Overwrite-Payload">
  <Set>
    <Payload contentType="application/json">{ "status" : 42 }</Payload>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

<FormParams> (<Set> का बच्चा)

यह अनुरोध पर मौजूद फ़ॉर्म पैरामीटर को बदलता है और उन्हें उन नई वैल्यू से बदलता है जिन्हें आपने इस एलिमेंट के साथ तय किया है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या <FormParam> एलिमेंट का कलेक्शन
पैरंट एलिमेंट <Set>
चाइल्ड एलिमेंट <FormParam>

<FormParams> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

यहां दिए गए उदाहरण में, "myparam" नाम के फ़ॉर्म पैरामीटर को नए कस्टम अनुरोध में request.header.myparam वैरिएबल की वैल्यू पर सेट किया गया है:

<AssignMessage name="AM-set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
  <AssignTo createNew="true" transport="http" type="request">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]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

यहां दिए गए उदाहरण में, x-ratelimit-remaining हेडर को ratelimit.Quota-1.available.count वैरिएबल की वैल्यू पर सेट किया गया है:

<AssignMessage name="AM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

अगर आपने अपनी नीति (<Set><Headers/></Set>) में खाली हेडर तय किए हैं, तो नीति कोई हेडर सेट नहीं करती है. इससे <Headers> को हटाने जैसा ही असर होगा.

<Path> (<Set> का बच्चा)

<Payload> (<Set> का बच्चा)

यह अनुरोध या जवाब के लिए मैसेज का मुख्य हिस्सा तय करता है. इसे <AssignTo> एलिमेंट से तय किया जाता है. पेलोड, किसी भी मान्य कॉन्टेंट टाइप का हो सकता है. जैसे, सादा टेक्स्ट, JSON या XML.

डिफ़ॉल्ट वैल्यू खाली स्ट्रिंग
ज़रूरी है? वैकल्पिक
समस्या स्ट्रिंग
पैरंट एलिमेंट <Set>
चाइल्ड एलिमेंट कोई नहीं

<Payload> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

यहां दिए गए उदाहरण में, सादा टेक्स्ट वाला पेलोड सेट किया गया है:

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

यहां JSON पेलोड सेट करने का उदाहरण दिया गया है:

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

यहां दिए गए उदाहरण में, वैरिएबल के नामों को कर्ली ब्रेसिज़ में रैप करके, वैरिएबल की वैल्यू को पेलोड में डाला गया है:

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

Apigee के पिछले वर्शन में, JSON पेलोड में वैरिएबल रेफ़रंस दिखाने के लिए कर्ली ब्रेसिज़ का इस्तेमाल नहीं किया जा सकता था. इन रिलीज़ में, आपको डेलिमिटर वर्णों के बारे में बताने के लिए variablePrefix और variableSuffix एट्रिब्यूट का इस्तेमाल करना होता था. साथ ही, वैरिएबल के नामों को रैप करने के लिए इनका इस्तेमाल करना होता था. जैसे:

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

यह पुराना सिंटैक्स अब भी काम करता है.

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

इस उदाहरण में, कर्ली ब्रेसिज़ सिंटैक्स का इस्तेमाल करके, पेलोड के कुछ हिस्से को वैरिएबल वैल्यू पर सेट किया गया है:

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

यहां दी गई टेबल में, <Payload> एट्रिब्यूट के बारे में बताया गया है:

एट्रिब्यूट ब्यौरा मौजूदगी टाइप
contentType

अगर यह विकल्प चुना जाता है, तो contentType की वैल्यू को Content-Type एचटीटीपी हेडर को असाइन किया जाता है.

वैकल्पिक स्ट्रिंग
variablePrefix यह फ़्लो वैरिएबल पर मौजूद मुख्य डीलिमिटर के बारे में बताता है. हालांकि, ऐसा करना ज़रूरी नहीं है. इसकी डिफ़ॉल्ट वैल्यू "{" होती है. ज़्यादा जानकारी के लिए, फ़्लो वैरिएबल का रेफ़रंस देखें. वैकल्पिक Char
variableSuffix यह विकल्प, फ़्लो वैरिएबल पर ट्रेलिंग डीलिमिटर के बारे में बताता है. डिफ़ॉल्ट रूप से "}" होता है. ज़्यादा जानकारी के लिए, फ़्लो वैरिएबल का रेफ़रंस देखें. वैकल्पिक Char

<QueryParams> (<Set> का बच्चा)

अनुरोध में मौजूद क्वेरी पैरामीटर को नई वैल्यू से बदलता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या <QueryParam> एलिमेंट का कलेक्शन
पैरंट एलिमेंट <Set>
चाइल्ड एलिमेंट <QueryParam>

<QueryParams> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

इस उदाहरण में, "address" क्वेरी पैरामीटर को request.header.address वैरिएबल की वैल्यू पर सेट किया गया है:

<AssignMessage name="AM-set-queryparams-1">  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

<QueryParams> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:

  • एचटीटीपी वर्ब: GET
  • मैसेज का टाइप: अनुरोध

अगर आपने अपनी नीति में खाली क्वेरी पैरामीटर (<Set><QueryParams/></Set>) तय किए हैं, तो नीति कोई क्वेरी पैरामीटर सेट नहीं करती है. इसका मतलब है कि <QueryParams> को शामिल नहीं किया गया है.

<ReasonPhrase> (<Set> का बच्चा)

यह कुकी, जवाब में वजह का वाक्यांश सेट करती है. आम तौर पर, इसका इस्तेमाल <StatusCode> के साथ मिलकर डीबग करने के लिए किया जाता है. इस एलिमेंट का अनुरोध पर कोई असर नहीं पड़ता.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या स्ट्रिंग
पैरंट एलिमेंट <Set>
चाइल्ड एलिमेंट कोई नहीं

<ReasonPhrase> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

यहां वजह बताने वाले एक सामान्य वाक्यांश का उदाहरण दिया गया है:

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

<AssignMessage name="AM-set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

<ReasonPhrase> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:

  • मैसेज का टाइप: जवाब

<StatusCode> (<Set> का बच्चा)

यह कुकी, रिस्पॉन्स पर स्टेटस कोड सेट करती है. इस एलिमेंट का अनुरोध पर कोई असर नहीं पड़ता.

डिफ़ॉल्ट वैल्यू '200' (जब <AssignTo> एट्रिब्यूट के createNew को 'सही है' पर सेट किया जाता है)
ज़रूरी है? वैकल्पिक
समस्या स्ट्रिंग या variable
पैरंट एलिमेंट <Set>
चाइल्ड एलिमेंट कोई नहीं

<StatusCode> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

यहां दिए गए उदाहरण में, एक सामान्य स्टेटस कोड सेट किया गया है:

<AssignMessage name="AM-set-statuscode-404">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

<StatusCode> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:

  • मैसेज का टाइप: जवाब

<Verb> (<Set> का बच्चा)

अनुरोध पर एचटीटीपी वर्ब सेट करता है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या स्ट्रिंग या variable
पैरंट एलिमेंट <Set>
चाइल्ड एलिमेंट कोई नहीं

<Verb> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

यहां दिए गए उदाहरण में, अनुरोध पर एक सामान्य क्रिया सेट की गई है:

<AssignMessage name="AM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

नीचे दिए गए उदाहरण में, किसी क्रिया को भरने के लिए वैरिएबल का इस्तेमाल किया गया है:

<AssignMessage name="AM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

<Verb> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:

  • मैसेज का टाइप: अनुरोध

<Version> (<Set> का बच्चा)

यह कुकी, अनुरोध पर एचटीटीपी वर्शन सेट करती है. इस एलिमेंट का जवाब पर कोई असर नहीं पड़ता.

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या स्ट्रिंग या variable
पैरंट एलिमेंट <Set>
चाइल्ड एलिमेंट कोई नहीं

<Version> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

यहां दिए गए उदाहरण में, वर्शन नंबर को "1.1" पर सेट किया गया है:

<AssignMessage name="AM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
 </AssignMessage>

यहां कर्ली ब्रैकेट में वैरिएबल का इस्तेमाल करके, वर्शन नंबर सेट किया गया है:

<AssignMessage name="AM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

<Version> का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब ये शर्तें पूरी होती हों:

  • मैसेज का टाइप: अनुरोध

अनुरोध के लिए कस्टम मैसेज बनाना

कस्टम अनुरोध मैसेज बनाने के लिए, AssignMessage नीति का इस्तेमाल किया जा सकता है. कस्टम अनुरोध बनाने के बाद, इसका इस्तेमाल इन तरीकों से किया जा सकता है:

  • अन्य नीतियों में इसके वैरिएबल ऐक्सेस करना
  • इसे किसी बाहरी सेवा को पास करें

कस्टम अनुरोध मैसेज बनाने के लिए, AssignMessage नीति में <AssignTo> एलिमेंट का इस्तेमाल करें. createNew को "true" पर सेट करें. साथ ही, एलिमेंट के मुख्य हिस्से में नए मैसेज का नाम डालें. उदाहरण के लिए:

<AssignMessage name="AM-assignto-2"> 
  <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> 
</AssignMessage>

डिफ़ॉल्ट रूप से, Edge कस्टम अनुरोध मैसेज के साथ कुछ नहीं करता है. इसे बनाने के बाद, Edge ओरिजनल अनुरोध के साथ फ़्लो को जारी रखेगा. कस्टम अनुरोध का इस्तेमाल करने के लिए, अपनी प्रॉक्सी में ServiceCallout नीति जैसी कोई नीति जोड़ें. इससे कस्टम अनुरोध को किसी बाहरी सेवा पर भेजा जा सकेगा.

यहां दिए गए उदाहरणों में, कस्टम अनुरोध वाले मैसेज बनाए गए हैं:

यहां दिए गए उदाहरण में, Assign Message की मदद से कस्टम अनुरोध ऑब्जेक्ट बनाया गया है:

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false
  </IgnoreUnresolvedVariables>
</AssignMessage>

इस उदाहरण में:

  • "MyCustomRequest" नाम का नया अनुरोध मैसेज ऑब्जेक्ट बनाता है.
  • MyCustomRequest पर, यह नीति:
    • यह कुकी, आने वाले अनुरोध से user-agent एचटीटीपी हेडर की वैल्यू को नए मैसेज में कॉपी करती है. <Copy>, user-agent फ़्लो वैरिएबल के लिए ऐब्सलूट रेफ़रंस का इस्तेमाल करता है. इसलिए, <Copy> के लिए source एट्रिब्यूट की वैल्यू तय करने की ज़रूरत नहीं है.
    • यह कस्टम मैसेज पर address क्वेरी पैरामीटर को, आने वाले अनुरोध के addy क्वेरी पैरामीटर की वैल्यू पर सेट करता है.
    • इस विकल्प की मदद से, एचटीटीपी वर्ब को GET पर सेट किया जाता है.
  • इस कुकी से <IgnoreUnresolvedVariables> को "false" पर सेट किया जाता है. अगर <IgnoreUnresolvedVariables> की वैल्यू "गलत है" पर सेट है और नीति जिस वैरिएबल को जोड़ने की कोशिश कर रही है वह मौजूद नहीं है, तो Edge, एपीआई फ़्लो में प्रोसेसिंग बंद कर देगा.

यहां एक और उदाहरण दिया गया है. इसमें AssignMessage का इस्तेमाल करके, कस्टम अनुरोध ऑब्जेक्ट बनाने का तरीका बताया गया है:

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

इस उदाहरण में, "partner.request" नाम का एक नया कस्टम अनुरोध बनाया गया है. इसके बाद, यह कुकी नए अनुरोध पर <Verb> और <Payload> सेट करती है.

फ़्लो में बाद में लागू होने वाली AssignMessage नीति में, कस्टम अनुरोध मैसेज को ऐक्सेस किया जा सकता है. यहां दिए गए उदाहरण में, कस्टम अनुरोध मैसेज के user-agent हेडर की वैल्यू मिलती है:

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo>partner.request</AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </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

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

मैसेज टाइप वैरिएबल, सभी एचटीटीपी अनुरोधों और जवाबों को दिखाते हैं. बिल्ट-इन Edge फ़्लो वैरिएबल request, response, और message मैसेज टाइप के हैं. ज़्यादा जानकारी के लिए मैसेज वैरिएबल के बारे में जानने के लिए, वैरिएबल रेफ़रंस देखें.

steps.assignmessage.UnresolvedVariable 500

यह गड़बड़ी तब होती है, जब मैसेज असाइन करें नीति में तय किया गया वैरिएबल:

  • दायरे से बाहर है (उस खास फ़्लो में उपलब्ध नहीं है जहां नीति लागू की जा रही है)
  • या
  • हल नहीं किया जा सकता (तय नहीं है)

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

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

गड़बड़ी का नाम वजह ठीक करें
InvalidIndex अगर 'असाइन करें' मैसेज के <Copy> और/या <Remove> एलिमेंट में इस इंडेक्स के बारे में बताया गया है नीति शून्य या नेगेटिव संख्या है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता.
InvalidVariableName अगर चाइल्ड एलिमेंट <Name> खाली है या <AssignVariable> एलिमेंट में नहीं बताया गया है, तो तो API प्रॉक्सी का परिनियोजन विफल हो जाता है, क्योंकि जिसे मान असाइन करना है. वैरिएबल का मान्य नाम डालना ज़रूरी है.
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 नीति का इस्तेमाल करके बाहरी सेवा से अनुरोध किया गया है.