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

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

यह क्या है

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

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

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

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

<AssignMessage> एलिमेंट

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

डिफ़ॉल्ट वैल्यू नीचे दिया गया डिफ़ॉल्ट नीति टैब देखें
ज़रूरी है? ज़रूरी है
स्ट्रीम किस तरह की है कॉम्प्लेक्स ऑब्जेक्ट
पैरंट एलिमेंट लागू नहीं
बच्चों के एलिमेंट <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 यूज़र इंटरफ़ेस (यूआई) में आपके फ़्लो में कोई Assignments मैसेज नीति जोड़ी गई है:

<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 के यूज़र इंटरफ़ेस (यूआई) में नई Assignments मैसेज नीति शामिल की जाती है, तब टेंप्लेट में सभी संभावित कार्रवाइयों के लिए स्टब शामिल होते हैं. आम तौर पर, यह चुनें कि इस नीति के साथ कौनसी कार्रवाई करनी है और बाकी सब एलिमेंट हटाएं. उदाहरण के लिए, अगर आपको कॉपी करने की कार्रवाई करनी है, तो <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> ज़रूरी नहीं इससे पता चलता है कि Assignments मैसेज की नीति किस मैसेज पर काम करती है. यह सामान्य अनुरोध या जवाब हो सकता है या यह कोई नया, पसंद के मुताबिक बनाया गया मैसेज हो सकता है.
<AssignVariable> ज़रूरी नहीं फ़्लो वैरिएबल को कोई वैल्यू असाइन करता है. अगर वैरिएबल मौजूद नहीं है, तो <AssignVariable> इसे बनाता है.
<IgnoreUnresolvedVariables> ज़रूरी नहीं यह तय करता है कि अनसुलझे वैरिएबल के मिलने पर प्रोसेसिंग रुक जाती है या नहीं.

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

उदाहरण

यहां दिए गए उदाहरणों में कुछ ऐसे तरीके दिखाए गए हैं जिनसे आप Assignments मैसेज नीति की नीति का इस्तेमाल कर सकते हैं:

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

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

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

2: पेलोड हटाएं

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5: क्वेरी पैरामीटर निकालें

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

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

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

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

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

  1. स्टैटिक वैल्यू के साथ, अनुरोध में तीन फ़्लो वैरिएबल बनाता है
  2. अनुरोध के फ़्लो में, दूसरी नीति के तहत फ़्लो वैरिएबल को डाइनैमिक तौर पर हासिल करता है
  3. उन्हें रिस्पॉन्स के पेलोड में सेट करता है
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

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

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

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

    <Payload> एलिमेंट के contentType एट्रिब्यूट को "ऐप्लिकेशन/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: सेवा कॉलआउट रिस्पॉन्स हेडर पाएं

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

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

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

{calloutResponse.header.Set-Cookie.values}

इस रेफ़रंस के हर चाइल्ड एलिमेंट के कुछ और उदाहरण हैं. और भी ज़्यादा उदाहरणों के लिए, GitHub पर AssignmentMessage का उदाहरण देखें.

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

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

<Add>

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

तीसरा उदाहरण

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

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

तीसरा उदाहरण

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

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

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

<AssignTo>

इससे पता चलता है कि Assignments मैसेज की नीति किस ऑब्जेक्ट पर काम करती है. इसके विकल्प यहां दिए गए हैं:

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

उदाहरण 2

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

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

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

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

तीसरा उदाहरण

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ज़रूरी नहीं स्ट्रिंग

<AssignVariable>

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

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

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

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

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

सिंटैक्स

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

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

उदाहरण 1

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

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

उदाहरण 2

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

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

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

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

तीसरा उदाहरण

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

<AssignMessage name='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> का बच्चा)

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

अगर myvar मौजूद नहीं है, तो <AssignVariable> इसे बनाता है.

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

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

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

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

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

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

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

<Ref> एलिमेंट इस सिंटैक्स का इस्तेमाल करता है:

सिंटैक्स

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

उदाहरण 1

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

उदाहरण 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>

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

तीसरा उदाहरण

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

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

"w" के लिए डिफ़ॉल्ट वैल्यू तय करने के लिए, इस तरह की कोई Assignments मैसेज नीति बनाएं:

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

  </AssignVariable>
</AssignMessage>

तीसरा उदाहरण

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

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

<Copy>

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

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

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

सिंटैक्स

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

उदाहरण 1

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

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

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

तीसरा उदाहरण

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

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

उदाहरण 4

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

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

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

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

<FormParams> को कॉपी करने पर <Copy>, टारगेट सेवा को मैसेज भेजने से पहले, मैसेज के Content-Type को "application/x-www-form-urlencoded" पर सेट करता है.

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

तीसरा उदाहरण

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

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

तीसरा उदाहरण

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

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

  • संदेश का प्रकार: जवाब

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

  • संदेश का प्रकार: जवाब

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

<DisplayName>

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

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

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

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

सिंटैक्स

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

उदाहरण

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

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

<IgnoreUnresolvedVariables>

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

<Remove>

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

उदाहरण 2

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

तीसरा उदाहरण

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

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

तीसरा उदाहरण

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

तीसरा उदाहरण

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

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

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

उदाहरण 4

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

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

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

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

<Set>

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

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

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

सिंटैक्स

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

उदाहरण 1

नीचे दिया गया उदाहरण <Set> एलिमेंट दिखाता है:

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

  • HTTP क्रिया: POST
  • मैसेज का टाइप: अनुरोध

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

नीचे दिया गया उदाहरण सादा टेक्स्ट पेलोड सेट करता है:

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

उदाहरण 2

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

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

तीसरा उदाहरण

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

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

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

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

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

उदाहरण 4

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

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

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

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

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

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

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

  • संदेश का प्रकार: जवाब

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

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

  • संदेश का प्रकार: जवाब

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

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

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

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

सिंटैक्स

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

उदाहरण 1

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

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

उदाहरण 2

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

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

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

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

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

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

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

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

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

सिंटैक्स

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

उदाहरण 1

नीचे दिया गया उदाहरण वर्शन संख्या को "1.1" पर सेट करता है:

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

उदाहरण 2

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

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

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

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

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

पसंद के मुताबिक अनुरोध वाले मैसेज बनाएं

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

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

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

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

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

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

उदाहरण 1

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

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

यह उदाहरण:

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

उदाहरण 2

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

<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> को सेट कर देती है.

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

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

वीडियो

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

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

गड़बड़ी कोड

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

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

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

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

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

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

steps.assignmessage.UnresolvedVariable 500

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

  • आउट ऑफ़ स्कोप (यह सुविधा उस फ़्लो में उपलब्ध नहीं होती है जहां नीति का इस्तेमाल किया जा रहा है)
  • या
  • रिज़ॉल्व नहीं किया जा सकता (तय नहीं किया गया है)

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

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

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

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

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

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

गड़बड़ी के जवाब का उदाहरण

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

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

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

स्कीमा

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

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

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

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

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