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

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

क्या

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

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

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

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

<AssignMessage> एलिमेंट

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

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

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

सिंटैक्स

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

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

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

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

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Edge यूज़र इंटरफ़ेस (यूआई) में नई AssignMessage नीति डालने पर, टेंप्लेट में सभी संभावित कार्रवाइयों के लिए स्टब शामिल होते हैं. आम तौर पर, आपको यह चुनना होता है कि इस नीति के साथ कौनसे ऑपरेशन करने हैं. इसके बाद, बाकी चाइल्ड एलिमेंट को हटाना होता है. उदाहरण के लिए, अगर आपको कॉपी करने की कार्रवाई करनी है, तो <Copy> एलिमेंट का इस्तेमाल करें. साथ ही, नीति को ज़्यादा आसानी से पढ़ने लायक बनाने के लिए, उसमें से <Add>, <Remove>, और अन्य चाइल्ड एलिमेंट हटाएं.

इस एलिमेंट में ये एट्रिब्यूट शामिल होते हैं, जो सभी नीतियों में शामिल हैं:

एट्रिब्यूट डिफ़ॉल्ट ज़रूरी है? ब्यौरा
name लागू नहीं ज़रूरी

नीति का अंदरूनी नाम. 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 नीति का इस्तेमाल किन तरीकों से किया जा सकता है:

1: हेडर जोड़ें

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

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

3: जवाब में बदलाव करना

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

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

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

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

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

4: डाइनैमिक कॉन्टेंट सेट करना

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. अनुरोध में स्टैटिक वैल्यू के साथ तीन फ़्लो वैरिएबल बनाता है
  2. अनुरोध के फ़्लो में, दूसरी नीति में फ़्लो वैरिएबल डाइनैमिक तौर पर मिलते हैं
  3. उन्हें जवाब के पेलोड में सेट करता है
<!-- Policy #1: Set variables in the request -->

<AssignMessage name="AM-set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
</AssignMessage>

पहली नीति में, <AssignVariable> एलिमेंट, अनुरोध में तीन वैरिएबल बनाता है और सेट करता है. हर <Name> एलिमेंट, वैरिएबल का नाम बताता है और <Value> वैल्यू बताता है.

दूसरी नीति, वैल्यू को पढ़ने के लिए <AssignVariable> एलिमेंट का इस्तेमाल करती है और तीन नए वैरिएबल बनाती है:

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

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

नीतियों के इस सेट को आज़माने के लिए:

  1. अनुरोध के फ़्लो में नीति #1 और #2 जोड़ें. नीति #1 को नीति #2 से पहले लागू करें.
  2. जवाब फ़्लो में तीसरी नीति जोड़ें.
  3. तीसरी नीति, जवाब में वैरिएबल जोड़ने के लिए <Set> एलिमेंट का इस्तेमाल करती है. यहां दिए गए उदाहरण में, Edge से क्लाइंट को मिलने वाले रिस्पॉन्स में एक्सएमएल पेलोड बनाया गया है:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true
      </IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>

    ध्यान दें कि <Set> में फ़्लो वैरिएबल ऐक्सेस करने के लिए, उन्हें कर्ली ब्रैकेट में रैप करना होता है.

    <Payload> एलिमेंट के contentType एट्रिब्यूट को "application/xml" पर सेट करना न भूलें.

  4. अपने एपीआई प्रॉक्सी को अनुरोध भेजें. उदाहरण के लिए:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

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

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    जवाब का मुख्य हिस्सा कुछ ऐसा दिखना चाहिए:

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

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

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

<AssignMessage name="AM-Payload-from-SC-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

हेडर की सभी वैल्यू की सूची बनाने के लिए, इस वैरिएबल का इस्तेमाल करें:

{calloutResponse.header.Set-Cookie.values}

इस रेफ़रंस में मौजूद हर चाइल्ड एलिमेंट के लिए, ज़्यादा उदाहरण दिए गए हैं. ज़्यादा उदाहरणों के लिए, GitHub पर AssignMessage का उदाहरण देखें.

चाइल्ड एलिमेंट रेफ़रंस

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

<Add>

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

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

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

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

सिंटैक्सs1

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

उदाहरण 1s2

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

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

उदाहरण 2s3

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

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

उदाहरण 3s4

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

<FormParams> (<Add> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs5

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

उदाहरण 1s6

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

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

उदाहरण 2s7

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

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

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

उदाहरण 3s8

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

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

username=nick&zip_code=90210&default_language=en

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

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

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

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

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

<Headers> (<Add> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs9

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

उदाहरण 1s10

इस उदाहरण में, अनुरोध वाले मैसेज में partner-id हेडर जोड़ा गया है. साथ ही, verifyapikey.VAK-1.developer.app.partner-id फ़्लो वैरिएबल की वैल्यू को उस हेडर को असाइन किया गया है.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

<QueryParams> (<Add> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs11

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

उदाहरण 1s12

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

<AssignTo>

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

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

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

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

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

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

सिंटैक्सs13

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

उदाहरण 1s14

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

<AssignMessage name="assignto-1">
<!-- DO NOT do this -->
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

दूसरा उदाहरणs15

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

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

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

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

उदाहरण 3s16

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<AssignVariable>

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

डिफ़ॉल्ट वैल्यू लागू नहीं
ज़रूरी है? वैकल्पिक
समस्या जटिल टाइप
पैरंट एलिमेंट <AssignMessage>
चाइल्ड एलिमेंट <Name> (ज़रूरी है)
<Ref>
<Template>
<Value>

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

  • लिटरल स्ट्रिंग: फ़्लो वैरिएबल के लिए लिटरल स्ट्रिंग वैल्यू तय करने के लिए, <Value> चाइल्ड एलिमेंट का इस्तेमाल करें.
  • फ़्लो वैरिएबल: डेस्टिनेशन फ़्लो वैरिएबल के लिए, किसी मौजूदा फ़्लो वैरिएबल की वैल्यू तय करने के लिए, <Ref> चाइल्ड एलिमेंट का इस्तेमाल करें. सोर्स के तौर पर इस्तेमाल किए जा सकने वाले फ़्लो वैरिएबल की पूरी सूची देखने के लिए, फ़्लो वैरिएबल रेफ़रंस देखें.
  • मैसेज टेंप्लेट: <Template> चाइल्ड एलिमेंट का इस्तेमाल करके, इंटरपोलेट करने के लिए मैसेज टेंप्लेट तय करें. इससे आपको डेस्टिनेशन फ़्लो वैरिएबल में डालने के लिए वैल्यू मिलेगी.

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

सिंटैक्सs17

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

उदाहरण 1s18

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

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

उदाहरण 2s19

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

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

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

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

तीसरा उदाहरणs20

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

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

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

<Name> (<AssignVariable> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs21

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

उदाहरण 1s22

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

उदाहरण 1s23

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

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

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

उदाहरण 2s23

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

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

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

उदाहरण 3s24

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

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

...और एपीआई प्रॉक्सी अब भी मान्य नतीजा दिखा रहा है.

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

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

<Template> (<AssignVariable> का चाइल्ड एलिमेंट)

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

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

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

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

सिंटैक्सs25

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

उदाहरण 1s26

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

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

उदाहरण 2s27

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

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

उदाहरण 3s28

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

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

<Value> (<AssignVariable> का चाइल्ड एलिमेंट)

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

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

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

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

सिंटैक्सs29

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

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

सिंटैक्सs30

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

उदाहरण 1s31

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

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

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

उदाहरण 2s32

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

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

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

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

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

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

<FormParams> (<Copy> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs33

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

उदाहरण 1s34

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

उदाहरण 2s35

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

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

उदाहरण 3s36

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

उदाहरण 4s37

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

<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> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

सिंटैक्सs38

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

उदाहरण 1s39

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

उदाहरण 2s40

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

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

उदाहरण 3s41

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

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

उदाहरण 1s42

यहां दिए गए उदाहरण से पता चलता है कि 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> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

सिंटैक्सs43

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

उदाहरण 1s44

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

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

<QueryParams> (<Copy> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs45

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

उदाहरण 1s46

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

उदाहरण 2s47

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

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

उदाहरण 3s48

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

<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> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

सिंटैक्सs49

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

उदाहरण 1s50

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

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

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

<StatusCode> (<Copy> का चाइल्ड एलिमेंट)

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

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

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

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

सिंटैक्सs52

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

उदाहरण 1s53

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

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

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

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

<Verb> (<Copy> का चाइल्ड एलिमेंट)

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

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

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

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

सिंटैक्सs54

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

उदाहरण 1s55

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

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

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

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

<Version> (<Copy> का चाइल्ड एलिमेंट)

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

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

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

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

सिंटैक्सs56

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

उदाहरण 1s57

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

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

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

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

<DisplayName>

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

<DisplayName> एलिमेंट, सभी नीतियों में शामिल होता है.

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

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

सिंटैक्स

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

उदाहरण

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

<DisplayName> एलिमेंट में कोई एट्रिब्यूट या चाइल्ड एलिमेंट नहीं है.

<IgnoreUnresolvedVariables>

इससे यह तय होता है कि किसी ऐसे वैरिएबल के मिलने पर प्रोसेसिंग रुक जाए या नहीं जिसे हल नहीं किया जा सकता.

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

अनसुलझे वैरिएबल को अनदेखा करने और प्रोसेसिंग जारी रखने के लिए, true पर सेट करें; ऐसा न करने पर false. डिफ़ॉल्ट वैल्यू false है.

<IgnoreUnresolvedVariables> को true पर सेट करना, <AssignMessage> के continueOnError को true पर सेट करने से अलग है. ऐसा इसलिए है, क्योंकि यह वैरिएबल की वैल्यू सेट करने और पाने के लिए खास तौर पर इस्तेमाल किया जाता है. अगर continueOnError को true पर सेट किया जाता है, तो Edge सभी गड़बड़ियों को अनदेखा कर देता है. इसमें सिर्फ़ वैरिएबल का इस्तेमाल करते समय होने वाली गड़बड़ियां शामिल नहीं हैं.

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

सिंटैक्सs58

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

उदाहरण 1s59

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

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

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

<Remove>

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

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

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

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

सिंटैक्सs60

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

उदाहरण 1s61

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

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

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

उदाहरण 2s62

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

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

उदाहरण 3s63

यहां दिए गए उदाहरण में, मैसेज ऑब्जेक्ट से सब कुछ हटा दिया गया है:

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

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

<FormParams> (<Remove> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs64

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

उदाहरण 1s65

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

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

उदाहरण 2s66

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

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

उदाहरण 3s67

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

<AssignMessage name="AM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

  • मैसेज का टाइप: अनुरोध
  • Content-Type: "application/x-www-form-urlencoded"

<Headers> (<Remove> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्स

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

उदाहरण 1s68

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

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

उदाहरण 2s69

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

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

तीसरा उदाहरणs70

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

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

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

<Payload> (<Remove> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्स

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

उदाहरण 1s71

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

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

<QueryParams> (<Remove> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs72

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

उदाहरण 1s73

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

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

उदाहरण 2s74

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

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

उदाहरण 3s75

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

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

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

उदाहरण 4s76

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

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

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

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

<Set>

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

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

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

सिंटैक्स

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

उदाहरण 1s77

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

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

उदाहरण 2s78

यहां दिए गए उदाहरण में, जवाब के लिए पेलोड के साथ-साथ Content-Type हेडर को ओवरराइट किया गया है.

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

<FormParams> (<Set> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs79

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

उदाहरण 1s80

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

<AssignMessage name="AM-set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

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

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

<Set>, मैसेज को टारगेट एंडपॉइंट पर भेजने से पहले, उसके Content-Type को "application/x-www-form-urlencoded" में बदल देता है.

<Headers> (<Set> का चाइल्ड एलिमेंट)

अनुरोध या जवाब में मौजूद एचटीटीपी हेडर को ओवरराइट करता है. इसे <AssignTo> एलिमेंट से तय किया जाता है.

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

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

सिंटैक्सs81

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

उदाहरण 1s81

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

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

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

<Path> (<Set> का चाइल्ड एलिमेंट)

<Payload> (<Set> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs82

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

उदाहरण 1s83

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

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

उदाहरण 2s84

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

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

उदाहरण 3s85

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

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

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

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

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

उदाहरण 4s86

<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> एलिमेंट में इस सिंटैक्स का इस्तेमाल किया जाता है:

सिंटैक्सs87

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

उदाहरण 1s88

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

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

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

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

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

<ReasonPhrase> (<Set> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs89

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

उदाहरण 1s90

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

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

उदाहरण 2s91

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

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

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

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

<StatusCode> (<Set> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs92

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

उदाहरण 1

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

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

उदाहरण 2

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

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

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

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

<Verb> (<Set> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्स

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

उदाहरण 1s93

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

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

उदाहरण 2s94

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

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

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

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

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

<Version> (<Set> का चाइल्ड एलिमेंट)

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

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

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

सिंटैक्सs95

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

उदाहरण 1s96

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

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

उदाहरण 2

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

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

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

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

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

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

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

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

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

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

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

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

उदाहरण 1s97

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

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

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

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

उदाहरण 2s98

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

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

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

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

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

वीडियो

AssignMessage नीति के बारे में ज़्यादा जानने के लिए, ये वीडियो देखें.

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

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

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

रनटाइम की गड़बड़ियां

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

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

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

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

steps.assignmessage.UnresolvedVariable 500

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

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

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

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

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

गड़बड़ी के वैरिएबल

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

वैरिएबल कहां उदाहरण
fault.name="fault_name" fault_name गड़बड़ी का नाम है, जैसा कि ऊपर रनटाइम में गड़बड़ियां टेबल में बताया गया है. गड़बड़ी का नाम, गड़बड़ी के कोड का आखिरी हिस्सा होता है. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name, उपयोगकर्ता की ओर से बताया गया उस नीति का नाम है जिसमें गड़बड़ी हुई है. assignmessage.AM-SetResponse.failed = true

गड़बड़ी के रिस्पॉन्स का उदाहरण

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

गड़बड़ी के नियम का उदाहरण

    <FaultRule name="Assign Message Faults">    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

स्कीमा

हर तरह की नीति को एक्सएमएल स्कीमा (.xsd) से तय किया जाता है. रेफ़रंस के लिए, नीति के स्कीमा GitHub पर उपलब्ध हैं.

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

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

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

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