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

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

क्या

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

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

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

AssignMessage नीति, इन चाइल्ड एलिमेंट की मदद से फ़्लो वैरिएबल बना सकती है या उनमें बदलाव कर सकती है:

<AssignMessage> एलिमेंट

AssignMessage नीति के बारे में बताता है.

डिफ़ॉल्ट वैल्यू नीचे डिफ़ॉल्ट नीति टैब देखें
क्या यह ज़रूरी है? ज़रूरी है
स्ट्रीम किस तरह की है कॉम्प्लेक्स ऑब्जेक्ट
पैरंट एलिमेंट लागू नहीं
चाइल्ड एलिमेंट <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

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

सिंटैक्स

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

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

डिफ़ॉल्ट नीति

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

<AssignMessage 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 continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2: पेलोड हटाना

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

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

तीसरा चरण: जवाब में बदलाव करना

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

<AssignMessage name="modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" type="response"></AssignTo>
</AssignMessage>

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

इस उदाहरण में, <AssignTo> एलिमेंट में वैरिएबल का नाम नहीं दिया गया है और type को "response" के तौर पर दिखाया गया है. इसलिए, यह नीति टारगेट सर्वर से मिले रिस्पॉन्स ऑब्जेक्ट में बदलाव करती है.

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

चौथा चरण: डाइनैमिक कॉन्टेंट सेट करना

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

एक्सएमएल पेलोड में Edge फ़्लो वैरिएबल एम्बेड करने के लिए, तय किए गए वैरिएबल को कर्ली ब्रैकेट में डालें, जैसे: {prefix.name}.

यहां दिए गए उदाहरण में, user-agent एचटीटीपी हेडर फ़्लो वैरिएबल की वैल्यू को User-agent नाम के एक्सएमएल एलिमेंट में एम्बेड किया गया है:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

JSON पेलोड के लिए, डेलिमिटर वर्ण के साथ variablePrefix और variableSuffix एट्रिब्यूट का इस्तेमाल करके वैरिएबल डाले जा सकते हैं. उदाहरण के लिए:

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

फ़्लो वैरिएबल की पूरी सूची के लिए, फ़्लो वैरिएबल का रेफ़रंस देखें.

16.08.17 को क्लाउड पर रिलीज़ किए गए वर्शन में, वैरिएबल डालने के लिए कर्ली ब्रैकेट का भी इस्तेमाल किया जा सकता है.

5: क्वेरी पैरामीटर हटाना

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

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

6: वैरिएबल सेट करना/पाना

इस उदाहरण में, मैसेज असाइन करने से जुड़ी तीन नीतियों का इस्तेमाल किया गया है:

  1. अनुरोध में स्टैटिक वैल्यू के साथ तीन फ़्लो वैरिएबल बनाता है
  2. अनुरोध फ़्लो में दूसरी नीति में, फ़्लो वैरिएबल को डाइनैमिक तौर पर पाता है
  3. उन्हें रिस्पॉन्स के पेलोड में सेट करता है
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="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>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</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 जोड़ें. नीति #2 से पहले नीति #1 डालना न भूलें.
  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>

7: सेवा कॉलआउट के रिस्पॉन्स हेडर पाना

यहां दिए गए उदाहरण में, मान लें कि एपीआई प्रॉक्सी अनुरोध में ServiceCallout नीति है और कॉलआउट रिस्पॉन्स में एक ही नाम (Set-Cookie) के कई हेडर हैं. मान लें कि Service Callout का रिस्पॉन्स वैरिएबल डिफ़ॉल्ट calloutResponse है, तो यहां दी गई नीति को दूसरी Set-Cookie हेडर वैल्यू मिलती है.

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</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>

उदाहरण 1

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

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

उदाहरण 2

नीचे दिए गए उदाहरण में, टारगेट एंडपॉइंट अनुरोध में User-Agent हेडर जोड़ने के लिए, <Headers> एलिमेंट का इस्तेमाल किया गया है:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

उदाहरण 3

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

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

इस उदाहरण में, अनुरोध के प्रीफ़्लो में <Add> का इस्तेमाल किया गया है. अगर ट्रैस टूल जैसे किसी टूल में नतीजे देखे जाते हैं, तो "http://httpbin.org/get" का अनुरोध, "http://httpbin.org/get?myParam=42" हो जाता है.

<Add> के चाइल्ड एलिमेंट, डाइनैमिक स्ट्रिंग सबस्टिट्यूशन की सुविधा देते हैं. इसे मैसेज टेंप्लेट कहा जाता है.

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

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

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

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

सिंटैक्स

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

उदाहरण 1

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

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

उदाहरण 2

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

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

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

उदाहरण 3

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

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

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

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

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

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

  • एचटीटीपी वर्ब: POST
  • मैसेज का टाइप: अनुरोध
  • इनमें से कोई एक (या दोनों) विकल्प:
    • फ़ॉर्म डेटा: किसी वैल्यू या "" (खाली स्ट्रिंग) पर सेट करें. उदाहरण के लिए, curl के साथ, अपने अनुरोध में -d "" जोड़ें.
    • Content-Length हेडर: अगर मूल अनुरोध में कोई डेटा नहीं है, तो इसे 0 पर सेट करें. अगर डेटा है, तो इसे बाइट में मौजूद मौजूदा लंबाई पर सेट करें. उदाहरण के लिए, curl का इस्तेमाल करके, अपने अनुरोध में -H "Content-Length: 0" जोड़ें.

उदाहरण के लिए:

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

<FormParams> जोड़ने पर, Edge, टारगेट की गई सेवा को मैसेज भेजने से पहले, अनुरोध के Content-Type हेडर को "application/x-www-form-urlencoded" पर सेट करता है.

<Headers> (<Add> का बच्चा)

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

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

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

सिंटैक्स

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

उदाहरण 1

नीचे दिए गए उदाहरण में, अनुरोध मैसेज में user-agent हेडर जोड़ा गया है और उस हेडर में request.user.agent फ़्लो वैरिएबल की वैल्यू असाइन की गई है.

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

<AssignTo>

यह तय करता है कि AssignMessage नीति किस ऑब्जेक्ट पर लागू होती है. आपके पास ये विकल्प हैं:

  • अनुरोध मैसेज: एपीआई प्रॉक्सी को मिला request
  • रिस्पॉन्स मैसेज: टारगेट सर्वर से मिला response
  • कस्टम मैसेज: कस्टम अनुरोध या रिस्पॉन्स ऑब्जेक्ट

ध्यान दें कि कुछ मामलों में, उस ऑब्जेक्ट को नहीं बदला जा सकता जिस पर AssignMessage नीति लागू होती है. उदाहरण के लिए, जवाब में क्वेरी पैरामीटर (<QueryParams>) या फ़ॉर्म पैरामीटर (<FormParams>) जोड़ने या बदलने के लिए, <Add> या <Set> का इस्तेमाल नहीं किया जा सकता. अनुरोध पर, सिर्फ़ क्वेरी पैरामीटर और फ़ॉर्म पैरामीटर में बदलाव किया जा सकता है.

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

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

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

सिंटैक्स

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

उदाहरण 1

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

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

उदाहरण 2

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

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

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

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

उदाहरण 3

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

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

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

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

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

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

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

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

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

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

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

  • अगर <AssignTo> किसी मैसेज पर ले जाता है, तो प्रोसेस अगले चरण पर बढ़ जाती है.
  • अगर <AssignTo> को हल नहीं किया जा सकता या यह किसी मैसेज टाइप के तौर पर हल नहीं होता है, तो type में बताए गए टाइप का एक नया वेरिएबल बनाया जाता है.
वैकल्पिक बूलियन
transport

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

डिफ़ॉल्ट वैल्यू "http" है. यह वैल्यू ही इस्तेमाल की जा सकती है.

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

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

वैकल्पिक स्ट्रिंग

<AssignVariable>

किसी डेस्टिनेशन फ़्लो वैरिएबल (उदाहरण के लिए, ऐसा वैरिएबल जिसकी वैल्यू, AssignMessage नीति से सेट की जाती है) को वैल्यू असाइन करता है. अगर फ़्लो वैरिएबल मौजूद नहीं है, तो <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> एलिमेंट तय किया है, तो उसे दूसरे चाइल्ड एलिमेंट के मुकाबले प्राथमिकता दी जाती है.

उदाहरण 1

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

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

उदाहरण 2

नीचे दिए गए उदाहरण में, डेस्टिनेशन फ़्लो वैरिएबल myvar को फ़्लो वैरिएबल request.header.user-agent की वैल्यू असाइन की गई है और डेस्टिनेशन फ़्लो वैरिएबल 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> उन्हें बनाता है.

उदाहरण 3

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

<AssignMessage name='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>

उदाहरण 1

नीचे दिए गए उदाहरण में, डेस्टिनेशन वैरिएबल को 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>

डेस्टिनेशन फ़्लो वैरिएबल के लिए डिफ़ॉल्ट वैल्यू तय करने के लिए, <Ref> के साथ <Value> का इस्तेमाल करें. अगर <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>

उदाहरण 1

इस उदाहरण में, डेस्टिनेशन फ़्लो वैरिएबल myvar को फ़्लो वैरिएबल request.header.user-agent की वैल्यू असाइन की गई है. साथ ही, 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 में किसी भी असाइनमेंट के लिए डिफ़ॉल्ट (या फ़ॉलबैक वैल्यू) तय नहीं की गई है.

उदाहरण 2

नीचे दिए गए उदाहरण में, डेस्टिनेशन फ़्लो वैरिएबल myvar को फ़्लो वैरिएबल request.header.user-agent की वैल्यू और 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" वैल्यू असाइन करता है.

उदाहरण 3

<AssignVariable> का सामान्य इस्तेमाल, क्वेरी पैरामीटर, हेडर या अनुरोध के साथ पास की जा सकने वाली अन्य वैल्यू की डिफ़ॉल्ट वैल्यू सेट करने के लिए किया जाता है. उदाहरण के लिए, आपने एक ऐसा weather API प्रॉक्सी बनाया है जिसमें अनुरोध करने के लिए, "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 की वैल्यू मिलती है और वह उसे अपने पास असाइन कर लेता है. अगर फ़्लो वैरिएबल null है, तो इसका मतलब है कि अनुरोध से "w" क्वेरी पैरामीटर को हटा दिया गया था. ऐसे में, यह उदाहरण <Value> एलिमेंट की डिफ़ॉल्ट वैल्यू का इस्तेमाल करता है. इसलिए, इस एपीआई प्रोक्सी के लिए अनुरोध किया जा सकता है, जो "w" क्वेरी पैरामीटर को हटा देता है:

http://myCO.com/v1/weather/forecastrss

...और फिर भी एपीआई प्रॉक्सी से मान्य नतीजा मिलता रहे.

<Value> का इस्तेमाल करने के उलट, <Ref> की वैल्यू एक फ़्लो वैरिएबल होनी चाहिए. जैसे, request, response या target ऑब्जेक्ट की प्रॉपर्टी. वैल्यू, आपके बनाए गए कस्टम फ़्लो वैरिएबल भी हो सकती है.

अगर आपने <Ref> की वैल्यू के लिए कोई ऐसा फ़्लो वैरिएबल तय किया है जो मौजूद नहीं है, और <IgnoreUnresolvedVariables> की वैल्यू "सही" है, तो Edge गड़बड़ी का मैसेज दिखाता है.

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

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

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

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

डिफ़ॉल्ट वैल्यू लागू नहीं
क्या यह ज़रूरी है? वैकल्पिक
स्ट्रीम किस तरह की है स्ट्रिंग
पैरंट एलिमेंट <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>

उदाहरण 1

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

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

उदाहरण 2

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

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

  </AssignVariable>
</AssignMessage>

उदाहरण 3

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

<AssignMessage name='template-2'>
  <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> की वैल्यू का इस्तेमाल किया जाता है. ऐसा तब भी किया जाता है, जब <Ref> की वैल्यू को हल नहीं किया जा सकता या वह शून्य है.

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

इस उदाहरण में, फ़्लो वैरिएबल 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> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

सिंटैक्स

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

उदाहरण 1

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

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

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

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

कॉपी के सोर्स ऑब्जेक्ट के बारे में बताता है.

  • अगर source की वैल्यू नहीं दी जाती है, तो उसे सामान्य मैसेज माना जाता है. उदाहरण के लिए, अगर नीति अनुरोध फ़्लो में है, तो सोर्स डिफ़ॉल्ट रूप से request ऑब्जेक्ट पर सेट होता है. अगर नीति, रिस्पॉन्स फ़्लो में है, तो यह डिफ़ॉल्ट रूप से response ऑब्जेक्ट पर सेट होती है. source को हटाने पर, कॉपी के सोर्स के तौर पर, फ़्लो वैरिएबल के एब्सोल्यूट रेफ़रंस का इस्तेमाल किया जा सकता है. उदाहरण के लिए, वैल्यू को {request.header.user-agent} के तौर पर तय करें.
  • अगर सोर्स वैरिएबल को हल नहीं किया जा सकता या वह मैसेज टाइप नहीं है, तो <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>

उदाहरण 1

नीचे दिए गए उदाहरण में, अनुरोध से एक फ़ॉर्म पैरामीटर को कस्टम अनुरोध "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>

उदाहरण 2

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

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

उदाहरण 3

नीचे दिए गए उदाहरण में, कस्टम अनुरोध "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>

उदाहरण 4

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

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

उदाहरण 1

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

उदाहरण 2

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

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

उदाहरण 3

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

<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> का बच्चा)

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

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

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

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

सिंटैक्स

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

उदाहरण 1

इस उदाहरण से पता चलता है कि 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> का बच्चा)

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

अगर यह नीति "सही" पर सेट है, तो यह <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>

उदाहरण 1

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

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</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>

उदाहरण 1

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

उदाहरण 2

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

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

उदाहरण 3

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

<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> का बच्चा)

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

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

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

अगर "सही" है, तो यह नीति <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>

उदाहरण 1

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

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

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

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

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

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

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

अगर "सही" है, तो <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>

उदाहरण 1

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

<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> का बच्चा)

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

अगर "सही" है, तो <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>

उदाहरण 1

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

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

उदाहरण 1

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

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

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

उदाहरण 1

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

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

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

उदाहरण 2

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

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

उदाहरण 1

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

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

उदाहरण 2

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

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

उदाहरण 3

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

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</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>

उदाहरण 1

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

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

उदाहरण 2

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

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

उदाहरण 3

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

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</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>

उदाहरण 1

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

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

उदाहरण 2

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

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

उदाहरण 3

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

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

उदाहरण 4

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

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</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>

उदाहरण 1

इस उदाहरण में <Set> एलिमेंट दिखाया गया है:

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</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>

उदाहरण 1

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

<AssignMessage name="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>

उदाहरण 1

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

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

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

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

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

डिफ़ॉल्ट वैल्यू खाली स्ट्रिंग
क्या यह ज़रूरी है? वैकल्पिक
स्ट्रीम किस तरह की है स्ट्रिंग
पैरंट एलिमेंट <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>

उदाहरण 1

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

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

उदाहरण 2

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

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

उदाहरण 3

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

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

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

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

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

उदाहरण 4

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

उदाहरण 1

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

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

उदाहरण 1

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

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

उदाहरण 2

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

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</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>

उदाहरण 1

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

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

उदाहरण 2

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

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</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>

उदाहरण 1

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

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

उदाहरण 2

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

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

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</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.1" पर सेट किया गया है:

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

उदाहरण 2

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

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

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

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

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

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

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

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

उदाहरण 1

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

<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> को "गलत" पर सेट करता है. जब <IgnoreUnresolvedVariables> "गलत" है, तो अगर नीति में जोड़े जाने वाले किसी वैरिएबल का अस्तित्व नहीं है, तो Edge, एपीआई फ़्लो में प्रोसेस करना बंद कर देगा.

उदाहरण 2

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

<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 createNew="false" type="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 नीति का इस्तेमाल करके SOAP पेलोड सेट करके, REST अनुरोध को SOAP अनुरोध में बदलें.

गड़बड़ी के कोड

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

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

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

गड़बड़ी का कोड एचटीटीपी कोड स्थिति वजह ठीक करें
steps.assignmessage.SetVariableFailed 500 नीति, वैरिएबल सेट नहीं कर सकी. हल न किए गए वैरिएबल के नाम के लिए, गड़बड़ी की स्ट्रिंग देखें.
steps.assignmessage.VariableOfNonMsgType 500

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

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

steps.assignmessage.UnresolvedVariable 500

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

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

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

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

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

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

API प्लैटफ़ॉर्म के सैंपल में, AssignMessage नीति के काम करने वाले सैंपल उपलब्ध हैं.

ProxyEndpoint से target.url को बदलने के तरीके के बारे में ज़्यादा जानने के लिए, Apigee कम्यूनिटी का यह लेख पढ़ें.

ServiceCallout नीति में "सेट पाथ" को ऐक्शन में देखने के लिए, Apigee के GitHub सैंपल में काम करते हुए सीखने का उदाहरण देखें. इसके लिए, सिर्फ़ रिपॉज़िटरी को क्लोन करें और उस विषय में दिए गए निर्देशों का पालन करें. इस उदाहरण में, अनुरोध पाथ सेट करने के लिए AssignMessage नीति का इस्तेमाल किया गया है. इसके बाद, किसी बाहरी सेवा से अनुरोध करने के लिए, सेवा कॉलआउट नीति का इस्तेमाल किया गया है.