অ্যাসাইন মেসেজ নীতি

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

কী

AssignMessage পলিসিটি এপিআই প্রক্সি ফ্লো চলাকালীন নতুন রিকোয়েস্ট এবং রেসপন্স মেসেজ পরিবর্তন বা তৈরি করে। এই পলিসিটি আপনাকে ঐ মেসেজগুলোর উপর নিম্নলিখিত কাজগুলো করার সুযোগ দেয়:

  • একটি মেসেজে নতুন ফর্ম প্যারামিটার, হেডার বা কোয়েরি প্যারামিটার যোগ করুন
  • একটি বার্তা থেকে অন্য বার্তায় বিদ্যমান বৈশিষ্ট্যগুলি অনুলিপি করুন
  • একটি বার্তা থেকে হেডার, কোয়েরি প্যারামিটার, ফর্ম প্যারামিটার এবং/অথবা মেসেজ পেলোড অপসারণ করুন
  • একটি বার্তায় বিদ্যমান প্রোপার্টিগুলোর মান সেট করুন

AssignMessage পলিসির মাধ্যমে, আপনি সাধারণত রিকোয়েস্ট বা রেসপন্স উভয়ের প্রোপার্টি যোগ, পরিবর্তন বা অপসারণ করেন। তবে, আপনি AssignMessage পলিসি ব্যবহার করে একটি কাস্টম রিকোয়েস্ট বা রেসপন্স মেসেজ তৈরি করতে এবং এটিকে একটি বিকল্প টার্গেটে পাঠাতেও পারেন, যেমনটি "কাস্টম রিকোয়েস্ট মেসেজ তৈরি করুন" অংশে বর্ণনা করা হয়েছে।

AssignMessage পলিসি মেসেজ বা ফ্লো ভেরিয়েবল তৈরি বা পরিবর্তন করতে পারে। আপস্ট্রিম সিস্টেমে প্রক্সির মাধ্যমে পাঠানোর আগে রিকোয়েস্ট মেসেজ পরিবর্তন করতে, অথবা এপিআই কনজিউমার অ্যাপ্লিকেশনে রিলে করার আগে রেসপন্স মেসেজ পরিবর্তন করতে এই পলিসিটি ব্যবহার করুন।

<AssignMessage> উপাদান

একটি AssignMessage পলিসি নির্ধারণ করে।

ডিফল্ট মান নিচে ডিফল্ট পলিসি ট্যাবটি দেখুন।
প্রয়োজন? প্রয়োজনীয়
প্রকার জটিল বস্তু
মূল উপাদান প্রযোজ্য নয়
শিশু উপাদান <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

<AssignMessage> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স

<AssignMessage> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

ডিফল্ট নীতি

নিম্নলিখিত উদাহরণটি এজ UI-তে আপনার ফ্লো-তে একটি AssignMessage পলিসি যোগ করার সময় ডিফল্ট সেটিংস দেখায়:

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

আপনি যখন Edge UI-তে একটি নতুন AssignMessage পলিসি যোগ করেন, তখন টেমপ্লেটটিতে সমস্ত সম্ভাব্য অপারেশনের জন্য স্টাব থাকে। সাধারণত, আপনি এই পলিসি দিয়ে কোন অপারেশন(গুলি) করতে চান তা নির্বাচন করেন এবং বাকি চাইল্ড এলিমেন্টগুলো সরিয়ে দেন। উদাহরণস্বরূপ, আপনি যদি একটি কপি অপারেশন করতে চান, তাহলে <Copy> এলিমেন্টটি ব্যবহার করুন এবং পলিসিটিকে আরও সহজে পাঠযোগ্য করার জন্য <Add> , <Remove> এবং অন্যান্য চাইল্ড এলিমেন্টগুলো সরিয়ে দিন।

এই উপাদানটির নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে যা সমস্ত নীতিতে সাধারণ:

বৈশিষ্ট্য ডিফল্ট প্রয়োজন? বর্ণনা
name N/A প্রয়োজন

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

continueOnError মিথ্যা ঐচ্ছিক একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে "false" এ সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ। একটি নীতি ব্যর্থ হওয়ার পরেও প্রবাহ সম্পাদন অব্যাহত রাখতে "সত্য" তে সেট করুন৷
enabled সত্য ঐচ্ছিক নীতি প্রয়োগ করতে "সত্য" এ সেট করুন। নীতিটি "বন্ধ" করতে "মিথ্যা" এ সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।
async মিথ্যা অবচয় এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

নিম্নলিখিত সারণিতে <AssignMessage> এর চাইল্ড এলিমেন্টগুলোর একটি উচ্চ-স্তরের বর্ণনা দেওয়া হয়েছে:

শিশু উপাদান প্রয়োজন? বর্ণনা
সাধারণ কার্যক্রম
<Add> ঐচ্ছিক <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা তথ্য মেসেজ অবজেক্টে যোগ করে।

<Add> এলিমেন্টটি মেসেজে এমন হেডার বা প্যারামিটার যোগ করে যা মূল মেসেজে নেই। বিদ্যমান হেডার বা প্যারামিটার ওভাররাইট করতে <Set> এলিমেন্টটি ব্যবহার করুন।

<Copy> ঐচ্ছিক source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা মেসেজ থেকে <AssignTo> ` এলিমেন্ট দ্বারা নির্দিষ্ট করা মেসেজ অবজেক্টে তথ্য কপি করে।
<Remove> ঐচ্ছিক <AssignTo> এলিমেন্টে নির্দিষ্ট করা message ভেরিয়েবল থেকে নির্দিষ্ট এলিমেন্টগুলো মুছে ফেলে।
<Set> ঐচ্ছিক অনুরোধ বা প্রতিক্রিয়ার বিদ্যমান প্রোপার্টিগুলোর মান প্রতিস্থাপন করে, যা <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা থাকে।

<Set> মূল মেসেজে আগে থেকে থাকা হেডার বা প্যারামিটারগুলোকে ওভাররাইট করে। নতুন হেডার বা প্যারামিটার যোগ করতে <Add> এলিমেন্টটি ব্যবহার করুন।

অন্যান্য শিশু উপাদান
<AssignTo> ঐচ্ছিক এটি নির্দিষ্ট করে যে AssignMessage পলিসিটি কোন মেসেজের উপর কাজ করবে। এটি সাধারণ অনুরোধ বা প্রতিক্রিয়া হতে পারে, অথবা এটি একটি নতুন, কাস্টম মেসেজও হতে পারে।
<AssignVariable> ঐচ্ছিক একটি ফ্লো ভেরিয়েবলে মান নির্ধারণ করে। যদি ভেরিয়েবলটি বিদ্যমান না থাকে, তাহলে <AssignVariable> এটি তৈরি করে।
<IgnoreUnresolvedVariables> ঐচ্ছিক কোনো অমীমাংসিত ভেরিয়েবলের সম্মুখীন হলে প্রসেসিং বন্ধ হবে কিনা তা নির্ধারণ করে।

এই চাইল্ড এলিমেন্টগুলোর প্রত্যেকটি পরবর্তী বিভাগগুলোতে বর্ণনা করা হয়েছে।

উদাহরণ

নিম্নলিখিত উদাহরণগুলিতে AssignMessage পলিসি ব্যবহারের কয়েকটি উপায় দেখানো হয়েছে:

১: হেডার যোগ করুন

নিম্নলিখিত উদাহরণটি <Add> এলিমেন্ট ব্যবহার করে রিকোয়েস্টে একটি হেডার যোগ করে:

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

২: পেলোড অপসারণ করুন

নিম্নলিখিত উদাহরণটি <Remove> এলিমেন্ট ব্যবহার করে রেসপন্স থেকে পেলোড মুছে ফেলে:

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

৩: প্রতিক্রিয়া পরিবর্তন করুন

নিম্নলিখিত উদাহরণটি একটি বিদ্যমান রেসপন্স অবজেক্টে একটি হেডার যোগ করে সেটিকে পরিবর্তন করে:

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

এই উদাহরণটি কোনো নতুন বার্তা তৈরি করে না। পরিবর্তে, এটি একটি HTTP হেডার যোগ করে বিদ্যমান প্রতিক্রিয়া বার্তাটিকে পরিবর্তন করে।

যেহেতু এই উদাহরণে <AssignTo> এলিমেন্টে ভেরিয়েবলের নাম হিসেবে response নির্দিষ্ট করা হয়েছে, তাই এই পলিসিটি সেই 'response' অবজেক্টটিকে পরিবর্তন করে, যা মূলত টার্গেট সার্ভার থেকে ফেরত আসা ডেটা দিয়ে সেট করা হয়েছিল।

এই পলিসি দ্বারা রেসপন্স মেসেজে যোগ করা HTTP হেডারটি LookupCache পলিসি দ্বারা পপুলেট করা একটি ভ্যারিয়েবল থেকে নেওয়া হয়। তাই, এই Assign Message পলিসি দ্বারা পরিবর্তিত রেসপন্স মেসেজে একটি HTTP হেডার থাকে, যা নির্দেশ করে যে ফলাফলগুলো ক্যাশ থেকে নেওয়া হয়েছে কি না। রেসপন্সে হেডার সেট করা ডিবাগিং এবং ট্রাবলশুটিংয়ের জন্য সুবিধাজনক হতে পারে।

৪: ডাইনামিক কন্টেন্ট সেট করুন

আপনি রেসপন্স এবং রিকোয়েস্ট মেসেজের পেলোডে ডাইনামিক কন্টেন্ট এম্বেড করতে অ্যাসাইন মেসেজ ব্যবহার করতে পারেন।

একটি XML পেলোডে Edge ফ্লো ভেরিয়েবল এম্বেড করতে, নির্দিষ্ট ভেরিয়েবলটিকে কার্লি ব্র্যাকেটের মধ্যে রাখুন, যেমন: {prefix.name}

নিম্নলিখিত উদাহরণটি User-agent নামক একটি XML এলিমেন্টে user-agent HTTP হেডার ফ্লো ভেরিয়েবলের মান এম্বেড করে:

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

JSON পেলোডের ক্ষেত্রে, আপনি নিম্নলিখিত উদাহরণে দেখানো অনুযায়ী ডিলিমিটার ক্যারেক্টারসহ variablePrefix এবং variableSuffix অ্যাট্রিবিউট ব্যবহার করে ভেরিয়েবল যুক্ত করতে পারেন:

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

ফ্লো ভেরিয়েবলগুলির সম্পূর্ণ তালিকার জন্য, ফ্লো ভেরিয়েবল রেফারেন্স দেখুন।

ক্লাউড রিলিজ ১৬.০৮.১৭ থেকে, আপনি ভেরিয়েবল ঢোকানোর জন্য কার্লি ব্র্যাকেটও ব্যবহার করতে পারবেন।

৫: কোয়েরি প্যারামিটার অপসারণ করুন

নিম্নলিখিত উদাহরণটি অনুরোধ থেকে apikey কোয়েরি প্যারামিটারটি সরিয়ে দেয়:

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

ব্যবহারকারী প্রমাণীকরণের জন্য VerifyAPIKey পলিসি ব্যবহার করার সময় রিকোয়েস্ট মেসেজ থেকে apikey কোয়েরি প্যারামিটারটি বাদ দেওয়া একটি উত্তম অভ্যাস। সংবেদনশীল কী-সম্পর্কিত তথ্য ব্যাকএন্ড টার্গেটে চলে যাওয়া রোধ করার জন্যই এটি করা হয়।

৬: ভেরিয়েবল সেট/গেট করা

নিম্নলিখিত উদাহরণটিতে তিনটি অ্যাসাইন মেসেজ পলিসি ব্যবহার করা হয়েছে:

  1. অনুরোধে স্থির মান সহ তিনটি ফ্লো ভেরিয়েবল তৈরি করে।
  2. অনুরোধ প্রবাহের মধ্যে থাকা দ্বিতীয় একটি পলিসিতে ফ্লো ভেরিয়েবলগুলো গতিশীলভাবে গ্রহণ করা হয়।
  3. প্রতিক্রিয়ার পেলোডে সেগুলোকে সেট করে।
<!-- Policy #1: Set variables in the request -->

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

প্রথম পলিসিতে, <AssignVariable> এলিমেন্টটি রিকোয়েস্টে তিনটি ভ্যারিয়েবল তৈরি ও সেট করে। প্রতিটি <Name> এলিমেন্ট একটি ভ্যারিয়েবলের নাম নির্দিষ্ট করে এবং <Value> তার মান নির্দিষ্ট করে।

দ্বিতীয় পলিসিটি মানগুলো পড়ার জন্য <AssignVariable> এলিমেন্ট ব্যবহার করে এবং তিনটি নতুন ভেরিয়েবল তৈরি করে:

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

দ্বিতীয় পলিসিতে, <Ref> এলিমেন্টটি সোর্স ভ্যারিয়েবলকে রেফারেন্স করে এবং <Name> এলিমেন্টগুলো নতুন ভ্যারিয়েবলগুলোর নাম নির্দিষ্ট করে। যদি <Ref> এলিমেন্ট দ্বারা রেফারেন্স করা ভ্যারিয়েবলটি অ্যাক্সেসযোগ্য না হয়, তবে আপনি <Value> এলিমেন্ট দ্বারা নির্দিষ্ট করা মানটি ব্যবহার করতে পারেন।

এই নীতিমালাগুলো পরখ করে দেখতে:

  1. অনুরোধ প্রবাহে পলিসি #১ এবং #২ যোগ করুন। অবশ্যই পলিসি #২ এর আগে পলিসি #১ রাখবেন।
  2. প্রতিক্রিয়া প্রবাহে তৃতীয় নীতিমালাটি যোগ করুন।
  3. তৃতীয় নীতিটি রেসপন্সে ভেরিয়েবল যোগ করার জন্য <Set> এলিমেন্ট ব্যবহার করে। নিম্নলিখিত উদাহরণটি রেসপন্সে একটি XML পেলোড তৈরি করে, যা Edge ক্লায়েন্টের কাছে ফেরত পাঠায়:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true
      </IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>

    মনে রাখবেন যে <Set> এর মধ্যে ফ্লো ভেরিয়েবল অ্যাক্সেস করার সিনট্যাক্স হলো সেগুলোকে কার্লি ব্র্যাকেটের মধ্যে রাখা।

    <Payload> এলিমেন্টের contentType অ্যাট্রিবিউটটি অবশ্যই "application/xml"-এ সেট করুন।

  4. আপনার এপিআই প্রক্সিতে একটি অনুরোধ পাঠান; উদাহরণস্বরূপ:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    ঐচ্ছিকভাবে, আপনি ফলাফলগুলোকে xmllint এর মতো কোনো ইউটিলিটির মাধ্যমে চালনা করতে পারেন, যাতে XML-টি একটি সুন্দরভাবে বিন্যস্ত কাঠামোতে প্রদর্শিত হয়:

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

    উত্তরের মূল অংশটি নিম্নরূপ হবে:

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

৭: সার্ভিস কলআউট রেসপন্স হেডারগুলো সংগ্রহ করুন

নিম্নলিখিত উদাহরণে, ধরা যাক এপিআই প্রক্সি অনুরোধে একটি সার্ভিসকলআউট পলিসি রয়েছে, এবং কলআউট প্রতিক্রিয়াটিতে একই নামের ( Set-Cookie ) একাধিক হেডার রয়েছে। সার্ভিস কলআউটের প্রতিক্রিয়া ভেরিয়েবলটি ডিফল্ট calloutResponse ধরে নিলে, নিম্নলিখিত পলিসিটি দ্বিতীয় Set-Cookie হেডারের মানটি গ্রহণ করে।

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

সমস্ত হেডার মান তালিকাভুক্ত করতে, এর পরিবর্তে নিম্নলিখিত ভেরিয়েবলটি ব্যবহার করুন:

{calloutResponse.header.Set-Cookie.values}

এই রেফারেন্সের প্রতিটি চাইল্ড এলিমেন্টে অতিরিক্ত উদাহরণ রয়েছে। আরও উদাহরণের জন্য, গিটহাবে AssignMessage উদাহরণটি দেখুন।

চাইল্ড এলিমেন্ট রেফারেন্স

এই অংশে <AssignMessage> এর চাইল্ড এলিমেন্টগুলো বর্ণনা করা হয়েছে।

<Add>

অনুরোধ বা প্রতিক্রিয়ায় তথ্য যোগ করে, যা <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা হয়।

<Add> এলিমেন্টটি মেসেজে এমন নতুন প্রোপার্টি যোগ করে যা মূল মেসেজে নেই। বিদ্যমান প্রোপার্টিগুলোর মান পরিবর্তন করতে <Set> এলিমেন্টটি ব্যবহার করুন।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার জটিল প্রকার
মূল উপাদান <AssignMessage>
শিশু উপাদান <FormParams>
<Headers>
<QueryParams>

<Add> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s1

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

উদাহরণ ১ এস২

নিম্নলিখিত উদাহরণটি <FormParams> এলিমেন্ট ব্যবহার করে প্রাথমিক অনুরোধ থেকে তিনটি কোয়েরি স্ট্রিং প্যারামিটারের মান গ্রহণ করে এবং সেগুলিকে টার্গেট এন্ডপয়েন্ট অনুরোধে ফর্ম প্যারামিটার হিসাবে সেট করে:

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

উদাহরণ ২ এস৩

নিম্নলিখিত উদাহরণটি টার্গেট এন্ডপয়েন্টে পাঠানো হবে এমন অনুরোধে একটি partner-id হেডার যোগ করতে <Headers> এলিমেন্ট ব্যবহার করে:

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

উদাহরণ ৩ এস৪

নিম্নলিখিত উদাহরণে রিকোয়েস্টে একটি স্থির মান সহ একটিমাত্র কোয়েরি প্যারামিটার যোগ করতে <QueryParams> এলিমেন্টটি ব্যবহার করা হয়েছে:

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

এই উদাহরণে রিকোয়েস্ট প্রিফ্লোতে <Add> ব্যবহার করা হয়েছে। আপনি যদি ট্রেস টুলের মতো কোনো টুলে ফলাফলগুলো দেখেন, তাহলে https://example-target.com/get এ করা রিকোয়েস্টটি https://example-target.com/get?myParam=42 পরিণত হবে।

<Add> এর চাইল্ড এলিমেন্টগুলো ডাইনামিক স্ট্রিং সাবস্টিটিউশন সমর্থন করে, যা মেসেজ টেমপ্লেটিং নামে পরিচিত।

<FormParams> ( <Add> এর চাইল্ড)

অনুরোধ বার্তায় নতুন ফর্ম প্যারামিটার যোগ করে। এই এলিমেন্টটি প্রতিক্রিয়া বার্তার উপর কোনো প্রভাব ফেলে না।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার <FormParam> উপাদানের অ্যারে
মূল উপাদান <Add>
শিশু উপাদান <FormParam>

<FormParams> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s5

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

উদাহরণ ১ এস৬

নিম্নলিখিত উদাহরণটি অনুরোধে একটি একক ফর্ম প্যারামিটার ("answer") এবং একটি স্থির মান ("42") যোগ করে:

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

উদাহরণ ২ এস৭

নিম্নলিখিত উদাহরণটি name ' কোয়েরি প্যারামিটারের মান গ্রহণ করে সেটিকে একটি ফর্ম প্যারামিটার হিসেবে অনুরোধে যোগ করে এবং তারপর কোয়েরি প্যারামিটারটি সরিয়ে দেয়:

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

লক্ষ্য করুন যে এই উদাহরণে <AssignTo> দিয়ে কোনো টার্গেট নির্দিষ্ট করা হয়নি। এই পলিসিটি শুধুমাত্র রিকোয়েস্টে প্যারামিটারটি যোগ করে।

উদাহরণ ৩ এস৮

নিম্নলিখিত উদাহরণটি অনুরোধে একাধিক ফর্ম প্যারামিটার যোগ করে:

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

এই উদাহরণটি মূল অনুরোধ থেকে কোয়েরি স্ট্রিং প্যারামিটারগুলো গ্রহণ করে এবং সেগুলোকে ভিন্ন নামে ফর্ম প্যারামিটার হিসেবে যুক্ত করে। তারপর এটি মূল কোয়েরি প্যারামিটারগুলো সরিয়ে দেয়। Apigee পরিবর্তিত অনুরোধটি টার্গেট এন্ডপয়েন্টে পাঠিয়ে দেবে।

আপনি ফ্লোটি দেখার জন্য ট্রেস টুলটি ব্যবহার করতে পারেন। আপনি দেখতে পাবেন যে রিকোয়েস্টের বডিতে ইউআরএল-এনকোডেড ফর্ম ডেটা রয়েছে, যা মূলত কোয়েরি স্ট্রিং প্যারামিটার হিসেবে পাস করা হয়েছিল:

username=nick&zip_code=90210&default_language=en

আপনি <FormParams> শুধুমাত্র তখনই ব্যবহার করতে পারবেন যখন নিম্নলিখিত শর্তগুলো পূরণ হবে:

  • HTTP ক্রিয়া: পোস্ট
  • বার্তার ধরণ: অনুরোধ
  • নিম্নলিখিতগুলির মধ্যে একটি (বা উভয়ই):
    • ফর্ম ডেটা: কোনো একটি মানে সেট করুন, অথবা খালি স্ট্রিং (") দিন। উদাহরণস্বরূপ, curl ব্যবহার করার সময়, আপনার অনুরোধে -d "" যোগ করুন।
    • Content-Length হেডার: এর মান 0 সেট করুন (যদি মূল অনুরোধে কোনো ডেটা না থাকে; অন্যথায়, বাইটে বর্তমান দৈর্ঘ্য)। উদাহরণস্বরূপ, curl ব্যবহার করে আপনার অনুরোধে -H "Content-Length: 0" যোগ করুন।

উদাহরণস্বরূপ:

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

আপনি যখন <FormParams> যোগ করেন, Edge টার্গেট সার্ভিসে মেসেজ পাঠানোর আগে রিকোয়েস্টের Content-Type হেডারটি "application/x-www-form-urlencoded"-এ সেট করে দেয়।

<Headers> ( <Add> এর চাইল্ড)

<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা অনুরোধ বা প্রতিক্রিয়ার সাথে নতুন হেডার যুক্ত করে।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার <Header> উপাদানগুলির অ্যারে
মূল উপাদান <Add>
শিশু উপাদান <Header>

<Headers> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s9

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

উদাহরণ ১ s10

নিম্নলিখিত উদাহরণটি অনুরোধ বার্তায় একটি partner-id হেডার যোগ করে এবং verifyapikey.VAK-1.developer.app.partner-id ফ্লো ভেরিয়েবলের মানটি সেই হেডারে নির্ধারণ করে।

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

<QueryParams> ( <Add> এর চাইল্ড)

অনুরোধে নতুন কোয়েরি প্যারামিটার যোগ করে। এই এলিমেন্টটি প্রতিক্রিয়ার উপর কোনো প্রভাব ফেলে না।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার <QueryParam> উপাদানগুলির অ্যারে
মূল উপাদান <Add>
শিশু উপাদান <QueryParam>

<QueryParams> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s11

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

উদাহরণ ১ এস১২

নিম্নলিখিত উদাহরণটি অনুরোধে 'myParam' কোয়েরি প্যারামিটারটি যোগ করে এবং এতে '42' মানটি নির্ধারণ করে:

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

আপনি <QueryParams> শুধুমাত্র তখনই ব্যবহার করতে পারবেন যখন নিম্নলিখিত শর্তগুলো পূরণ হবে:

  • HTTP ক্রিয়া: GET
  • বার্তার ধরণ: অনুরোধ

এছাড়াও, আপনি শুধুমাত্র তখনই কোয়েরি প্যারামিটার সেট করতে পারবেন যখন <AssignTo> এলিমেন্টের type অ্যাট্রিবিউটটি একটি রিকোয়েস্ট মেসেজ হবে। রেসপন্সে এগুলো সেট করলে কোনো প্রভাব পড়ে না।

যদি আপনি আপনার পলিসিতে কোয়েরি প্যারামিটারের একটি খালি অ্যারে ( <Add><QueryParams/></Add> ) সংজ্ঞায়িত করেন, তাহলে পলিসিটি কোনো কোয়েরি প্যারামিটার যোগ করে না। এটি <QueryParams> বাদ দেওয়ার সমান।

<AssignTo>

এটি নির্ধারণ করে যে AssignMessage পলিসিটি কোন অবজেক্টের উপর কাজ করবে। বিকল্পগুলো হলো:

  • অনুরোধ বার্তা: এপিআই প্রক্সি দ্বারা প্রাপ্ত request
  • প্রতিক্রিয়া বার্তা: লক্ষ্য সার্ভার থেকে প্রাপ্ত response
  • কাস্টম বার্তা: একটি কাস্টম অনুরোধ বা প্রতিক্রিয়া অবজেক্ট

মনে রাখবেন যে কিছু ক্ষেত্রে, আপনি সেই অবজেক্টটি পরিবর্তন করতে পারবেন না যার উপর AssignMessage পলিসিটি কাজ করে। উদাহরণস্বরূপ, আপনি রেসপন্সে কোয়েরি প্যারামিটার ( <QueryParams> ) বা ফর্ম প্যারামিটার ( <FormParams> ) যোগ বা পরিবর্তন করতে <Add> বা <Set> ব্যবহার করতে পারবেন না। আপনি শুধুমাত্র রিকোয়েস্টের ক্ষেত্রেই কোয়েরি প্যারামিটার এবং ফর্ম প্যারামিটার পরিবর্তন করতে পারবেন।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার স্ট্রিং
মূল উপাদান <AssignMessage>
শিশু উপাদান কোনোটিই না

যদি আপনি <AssignTo> নির্দিষ্ট না করেন, অথবা যদি আপনি <AssignTo> এলিমেন্টটি নির্দিষ্ট করেন কিন্তু এর জন্য কোনো টেক্সট ভ্যালু নির্দিষ্ট না করেন, তাহলে পলিসিটি ডিফল্ট রিকোয়েস্ট বা রেসপন্সের উপর কাজ করে, যা নির্ভর করে পলিসিটি কোথায় এক্সিকিউট হচ্ছে তার উপর। যদি পলিসিটি রিকোয়েস্ট ফ্লোতে এক্সিকিউট হয়, তবে এটি রিকোয়েস্ট মেসেজকে প্রভাবিত করে। আর যদি এটি রেসপন্স ফ্লোতে এক্সিকিউট হয়, তবে পলিসিটি ডিফল্টভাবে রেসপন্সকে প্রভাবিত করে।

<AssignTo> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s13

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

উদাহরণ ১ এস১৪

নিম্নলিখিত উদাহরণটি নির্দিষ্ট করে যে টার্গেট হল মূল অনুরোধ যা টার্গেট এন্ডপয়েন্টে পাঠানো হবে:

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

উদাহরণ ২ এস১৫

নিম্নলিখিত উদাহরণটি একটি নতুন রিকোয়েস্ট অবজেক্ট তৈরি করে:

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

যখন আপনি একটি নতুন অনুরোধ বা প্রতিক্রিয়া অবজেক্ট তৈরি করেন, তখন AssignMessage পলিসির অন্যান্য উপাদানগুলি (যেমন <Add> , <Set> , এবং <Copy> ) সেই নতুন অনুরোধ অবজেক্টটির উপর কাজ করে।

আপনি ফ্লো-এর পরবর্তী পর্যায়ে অন্যান্য পলিসিতে নতুন রিকোয়েস্ট অবজেক্টটি অ্যাক্সেস করতে পারেন, অথবা একটি ServiceCallout পলিসির মাধ্যমে নতুন রিকোয়েস্ট অবজেক্টটি কোনো এক্সটার্নাল সার্ভিসে পাঠাতে পারেন।

উদাহরণ ৩ এস১৬

নিম্নলিখিত উদাহরণটি "MyRequestObject" নামের একটি নতুন রিকোয়েস্ট অবজেক্ট তৈরি করে:

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

যখন আপনি একটি নতুন অনুরোধ বা প্রতিক্রিয়া অবজেক্ট তৈরি করেন, তখন AssignMessage পলিসির অন্যান্য উপাদানগুলি (যেমন <Add> , <Set> , এবং <Copy> ) সেই নতুন অনুরোধ অবজেক্টটির উপর কাজ করে।

আপনি ফ্লো-এর পরবর্তী পর্যায়ে অন্যান্য পলিসিতে নতুন রিকোয়েস্ট অবজেক্টটি অ্যাক্সেস করতে পারেন, অথবা একটি ServiceCallout পলিসির মাধ্যমে নতুন রিকোয়েস্ট অবজেক্টটি কোনো এক্সটার্নাল সার্ভিসে পাঠাতে পারেন।

নিম্নলিখিত সারণিতে <AssignTo> এর বৈশিষ্ট্যগুলো বর্ণনা করা হয়েছে:

বৈশিষ্ট্য বর্ণনা প্রয়োজন? প্রকার
createNew

মান নির্ধারণ করার সময় এই নীতিটি একটি নতুন বার্তা তৈরি করবে কিনা তা নির্ধারণ করে।

যদি 'true' হয়, তাহলে পলিসিটি ' type ' দ্বারা নির্দিষ্ট করা ধরনের (হয় 'request' অথবা 'response') একটি নতুন ভেরিয়েবল তৈরি করে। যদি আপনি নতুন ভেরিয়েবলের নাম নির্দিষ্ট না করেন, তাহলে পলিসিটি type এর মানের উপর ভিত্তি করে একটি নতুন request বা response অবজেক্ট তৈরি করে।

যদি 'ফলস' হয়, তাহলে পলিসিটি দুটি উপায়ের একটিতে সাড়া দেয়:

  • যদি <AssignTo> ভেরিয়েবলের নামটি কোনো অনুরোধ বা প্রতিক্রিয়া হিসেবে সমাধান করতে পারে, তাহলে এটি প্রক্রিয়াকরণ চালিয়ে যায়। উদাহরণস্বরূপ, যদি পলিসিটি একটি অনুরোধ প্রবাহে থাকে, তাহলে ভেরিয়েবলটি হবে অনুরোধ অবজেক্ট। যদি পলিসিটি একটি প্রতিক্রিয়ায় থাকে, তাহলে ভেরিয়েবলটি হবে প্রতিক্রিয়া অবজেক্ট।
  • যদি <AssignTo> সমাধান করা না যায়, অথবা এটি কোনো নন-মেসেজ টাইপে সমাধান হয়, তাহলে পলিসিটি একটি ত্রুটি দেখায়।

যদি createNew নির্দিষ্ট করা না থাকে, তাহলে পলিসিটি দুটি উপায়ের একটিতে সাড়া দেয়:

  • যদি <AssignTo> এর টেক্সট ভ্যালুটি কোনো মেসেজে পরিণত হয়, তাহলে প্রসেসিং পরবর্তী ধাপে অগ্রসর হয়।
  • যদি <AssignTo> এর টেক্সট ভ্যালুটি রিজলভ করা না যায়, অথবা এটি কোনো নন-মেসেজ টাইপে রিজলভ হয়, তাহলে type এ উল্লেখিত টাইপের একটি নতুন ভ্যারিয়েবল তৈরি করা হয়।
ঐচ্ছিক বুলিয়ান
transport

অনুরোধ বা প্রতিক্রিয়া বার্তার ধরনের জন্য পরিবহন প্রকার নির্দিষ্ট করে।

ডিফল্ট মান হলো 'http' (একমাত্র সমর্থিত মান)।

ঐচ্ছিক স্ট্রিং
type যখন createNew মান `true` হয়, তখন এটি নতুন বার্তার ধরন নির্দিষ্ট করে। এর বৈধ মানগুলো হলো `request` বা `response`।

আপনি যদি এই অ্যাট্রিবিউটটি বাদ দেন, তাহলে ফ্লো-এর কোন পর্যায়ে এই পলিসিটি কার্যকর হচ্ছে তার উপর নির্ভর করে Edge একটি রিকোয়েস্ট অথবা একটি রেসপন্স তৈরি করে।

ঐচ্ছিক স্ট্রিং

<AssignVariable>

একটি ফ্লো ভেরিয়েবলে মান নির্ধারণ করে। যদি ফ্লো ভেরিয়েবলটি বিদ্যমান না থাকে, তাহলে <AssignVariable> এটি তৈরি করে।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার জটিল প্রকার
মূল উপাদান <AssignMessage>
শিশু উপাদান <Name> (আবশ্যক)
<Ref>
<Template>
<Value>

আপনি ফ্লো ভেরিয়েবলে যে মানটি নির্ধারণ করেন, তা নিম্নলিখিতগুলির মধ্যে একটি হতে পারে:

  • আক্ষরিক স্ট্রিং: ফ্লো ভেরিয়েবলের জন্য একটি আক্ষরিক স্ট্রিং মান নির্দিষ্ট করতে <Value> চাইল্ড এলিমেন্টটি ব্যবহার করুন।
  • ফ্লো ভেরিয়েবল: গন্তব্য ফ্লো ভেরিয়েবলের জন্য বিদ্যমান কোনো ফ্লো ভেরিয়েবলের মান নির্দিষ্ট করতে <Ref> চাইল্ড এলিমেন্টটি ব্যবহার করুন। উৎস হিসেবে ব্যবহারযোগ্য ফ্লো ভেরিয়েবলগুলোর সম্পূর্ণ তালিকার জন্য, ফ্লো ভেরিয়েবল রেফারেন্স দেখুন।
  • মেসেজ টেমপ্লেট: ডেস্টিনেশন ফ্লো ভেরিয়েবলে রাখার জন্য মান পেতে, ইন্টারপোলেট করার উদ্দেশ্যে একটি মেসেজ টেমপ্লেট নির্দিষ্ট করতে <Template> চাইল্ড এলিমেন্টটি ব্যবহার করুন।

<AssignVariable> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s17

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

উৎস ভেরিয়েবল নির্দিষ্ট করতে <Ref> এলিমেন্টটি ব্যবহার করুন। যদি <Ref> দ্বারা নির্দেশিত ভেরিয়েবলটি অ্যাক্সেসযোগ্য না হয়, Edge <Value> এলিমেন্ট দ্বারা নির্দিষ্ট করা মানটি ব্যবহার করে। যদি আপনি <Template> সংজ্ঞায়িত করেন, তবে এটি অন্যান্য চাইল্ড এলিমেন্টগুলোর উপর অগ্রাধিকার পায়।

উদাহরণ ১ এস১৮

নিম্নলিখিত উদাহরণটি myvar নামক একটি নতুন ভেরিয়েবলের মান "42" এই আক্ষরিক মানে সেট করে:

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

উদাহরণ ২ এস১৯

নিম্নলিখিত উদাহরণটি request.header.user-agent ফ্লো ভেরিয়েবলের মান myvar ডেস্টিনেশন ফ্লো ভেরিয়েবলে এবং country Country ফ্লো ভেরিয়েবলে অ্যাসাইন করে:

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

যদি কোনো একটি অ্যাসাইনমেন্ট ব্যর্থ হয়, তাহলে Edge তার পরিবর্তে গন্তব্য ফ্লো ভেরিয়েবলে 'ErrorOnCopy' মানটি অ্যাসাইন করে।

যদি myvar বা Country ফ্লো ভেরিয়েবলগুলো বিদ্যমান না থাকে, তাহলে <AssignVariable> সেগুলো তৈরি করে।

উদাহরণ ৩ এস২০

নিম্নলিখিত উদাহরণে <Template> চাইল্ড এলিমেন্ট ব্যবহার করে দুটি কনটেক্সট ভেরিয়েবলকে তাদের মাঝে একটি লিটারেল স্ট্রিং (একটি হাইফেন) দিয়ে যুক্ত করা হয়েছে:

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

<AssignVariable> এর একটি সাধারণ ব্যবহার হলো কোয়েরি প্যারামিটার, হেডার বা অনুরোধের সাথে পাঠানো যায় এমন অন্য কোনো মানের জন্য একটি ডিফল্ট মান নির্ধারণ করা। এটি করার জন্য <Ref> এবং <Value> চাইল্ড এলিমেন্ট দুটিকে একসাথে ব্যবহার করা হয়। আরও তথ্যের জন্য, <Ref> এর উদাহরণগুলো দেখুন।

<Name> ( <AssignVariable> এর চাইল্ড)

গন্তব্য ফ্লো ভেরিয়েবলের নাম নির্দিষ্ট করে (যেমন, যে ভেরিয়েবলের মান AssignMessage পলিসি দ্বারা সেট করা হয়)। যদি <AssignVariable> এ উল্লেখিত ভেরিয়েবলটি বিদ্যমান না থাকে, তবে পলিসিটি সেই নামে একটি ভেরিয়েবল তৈরি করে।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? প্রয়োজনীয়
প্রকার স্ট্রিং
মূল উপাদান <AssignVariable>
শিশু উপাদান কোনোটিই না

<Name> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s21

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

উদাহরণ ১ এস২২

নিম্নলিখিত উদাহরণে গন্তব্য ভেরিয়েবল হিসেবে myvar নির্দিষ্ট করা হয়েছে, এবং এর আক্ষরিক মান "42"-এ সেট করা হয়েছে:

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

যদি myvar বিদ্যমান না থাকে, তাহলে <AssignVariable> এটি তৈরি করে।

<Ref> ( <AssignVariable> এর চাইল্ড)

অ্যাসাইনমেন্টের উৎস হিসেবে একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করে। ফ্লো ভেরিয়েবলটি পূর্ব-নির্ধারিত ফ্লো ভেরিয়েবলগুলোর ( ফ্লো ভেরিয়েবল রেফারেন্সে তালিকাভুক্ত) একটি হতে পারে, অথবা আপনার তৈরি করা একটি কাস্টম ফ্লো ভেরিয়েবলও হতে পারে।

<Ref> এর মান সর্বদা একটি ফ্লো ভেরিয়েবল হিসেবে গণ্য হয়; আপনি এর মান হিসেবে কোনো আক্ষরিক স্ট্রিং নির্দিষ্ট করতে পারবেন না। একটি আক্ষরিক স্ট্রিং মান নির্ধারণ করতে, এর পরিবর্তে <Value> এলিমেন্টটি ব্যবহার করুন।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার স্ট্রিং
মূল উপাদান <AssignVariable>
শিশু উপাদান কোনোটিই না

যখন আপনি <Ref> দিয়ে একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করেন, তখন এর ভেতরের বন্ধনী "{}" বাদ দিন, যা সাধারণত একটি ফ্লো ভেরিয়েবলকে রেফারেন্স করতে ব্যবহার করা হয়। উদাহরণস্বরূপ, আপনার নতুন ভেরিয়েবলের মান client.host ফ্লো ভেরিয়েবলের মানের সমান করতে:

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

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

গন্তব্য ফ্লো ভেরিয়েবলের জন্য একটি ডিফল্ট মান নির্ধারণ করতে, <Ref> এর সাথে <Value> ব্যবহার করুন। যদি <Ref> দ্বারা নির্দিষ্ট ফ্লো ভেরিয়েবলটির অস্তিত্ব না থাকে, সেটি পড়া না যায়, বা তার মান null হয়, তাহলে Edge এর পরিবর্তে গন্তব্য ফ্লো ভেরিয়েবলে <Value> এর মানটি নির্ধারণ করে দেয়।

<Ref> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স

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

উদাহরণ ১ এস২৩

নিম্নলিখিত উদাহরণটি request.header.user-agent ফ্লো ভেরিয়েবলের মান myvar ডেস্টিনেশন ফ্লো ভেরিয়েবলে এবং country কোয়েরি প্যারামিটারের মান ` Country ভেরিয়েবলে অ্যাসাইন করে:

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

এই উদাহরণে, Edge-এ কোনো অ্যাসাইনমেন্টের জন্যই কোনো ডিফল্ট (বা ফলব্যাক ভ্যালু) নির্দিষ্ট করা নেই।

উদাহরণ ২ এস২৩

নিম্নলিখিত উদাহরণটি request.header.user-agent ফ্লো ভেরিয়েবলের মান myvar ডেস্টিনেশন ফ্লো ভেরিয়েবলে এবং country কোয়েরি প্যারামিটারের মান ` Country ভেরিয়েবলে অ্যাসাইন করে:

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

এই উদাহরণে, যদি request.header.user-agent ফ্লো ভেরিয়েবল অথবা Country কোয়েরি প্যারামিটারের মান null, অপাঠ্য বা ত্রুটিপূর্ণ হয়, তাহলে Edge নতুন ভেরিয়েবলগুলোতে "ErrorOnCopy" মানটি নির্ধারণ করে দেয়।

উদাহরণ ৩ এস২৪

<AssignVariable> এর একটি সাধারণ ব্যবহার হলো কোনো কোয়েরি প্যারামিটার, হেডার বা অনুরোধের সাথে পাঠানো যায় এমন অন্য কোনো মানের ডিফল্ট মান নির্ধারণ করা। উদাহরণস্বরূপ, আপনি একটি আবহাওয়া এপিআই প্রক্সি তৈরি করেছেন যেখানে অনুরোধটি "w" নামের একটিমাত্র কোয়েরি প্যারামিটার গ্রহণ করে। এই প্যারামিটারটিতে সেই শহরের আইডি থাকে যার আবহাওয়া আপনি জানতে চান। অনুরোধের URL-টির গঠনটি হলো:

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

'w'-এর জন্য একটি ডিফল্ট মান নির্ধারণ করতে, নিম্নলিখিতের মতো একটি AssignMessage পলিসি তৈরি করুন:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

এই উদাহরণে, <AssignVariable> request.queryparam.w এর মান গ্রহণ করে এবং সেটিকে নিজের মধ্যেই অ্যাসাইন করে। যদি ফ্লো ভ্যারিয়েবলটি `null` হয়, অর্থাৎ রিকোয়েস্ট থেকে 'w' কোয়েরি প্যারামিটারটি বাদ দেওয়া হয়ে থাকে, তাহলে এই উদাহরণটি <Value> এলিমেন্টের ডিফল্ট মান ব্যবহার করে। সুতরাং, আপনি এই এপিআই প্রক্সিতে এমন একটি রিকোয়েস্ট করতে পারেন যেখানে 'w' কোয়েরি প্যারামিটারটি বাদ দেওয়া হয়েছে:

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

...এবং তারপরেও এপিআই প্রক্সি যেন একটি বৈধ ফলাফল প্রদান করে।

<Value> ব্যবহারের থেকে ভিন্নভাবে, <Ref> এর মান অবশ্যই একটি ফ্লো ভ্যারিয়েবল হতে হবে, যেমন request , response , বা target অবজেক্টের কোনো প্রপার্টি। এই মানটি আপনার তৈরি করা একটি কাস্টম ফ্লো ভ্যারিয়েবলও হতে পারে।

যদি আপনি <Ref> এর মান হিসেবে এমন একটি ফ্লো ভ্যারিয়েবল নির্দিষ্ট করেন যার কোনো অস্তিত্ব নেই, এবং <IgnoreUnresolvedVariables> এর মান "true" হয়, তাহলে Edge একটি ত্রুটি দেখায়।

<Template> ( <AssignVariable> এর চাইল্ড)

একটি মেসেজ টেমপ্লেট নির্দিষ্ট করে। একটি মেসেজ টেমপ্লেট পলিসি কার্যকর হওয়ার সময় ভেরিয়েবল স্ট্রিং প্রতিস্থাপন করতে দেয় এবং আক্ষরিক স্ট্রিং-এর সাথে কার্লি ব্র্যাকেটে আবদ্ধ ভেরিয়েবলের নাম একত্রিত করতে পারে। এছাড়াও, মেসেজ টেমপ্লেট এস্কেপিং এবং কেস কনভার্সনের মতো ফাংশন সমর্থন করে।

একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করতে ref অ্যাট্রিবিউটটি ব্যবহার করুন, যেখানে ভেরিয়েবলটির মান হবে একটি মেসেজ টেমপ্লেট। উদাহরণস্বরূপ, আপনি একটি ডেভেলপার অ্যাপে কাস্টম অ্যাট্রিবিউট হিসেবে একটি মেসেজ টেমপ্লেট সংরক্ষণ করতে পারেন। Edge যখন API কী বা সিকিউরিটি টোকেন যাচাই করার পর (একটি অতিরিক্ত পলিসির মাধ্যমে) ডেভেলপার অ্যাপটিকে শনাক্ত করে, তখন <AssignVariable> এলিমেন্টটি অ্যাপটির কাস্টম অ্যাট্রিবিউট থেকে মেসেজ টেমপ্লেটটি ব্যবহার করতে পারে, যা সিকিউরিটি পলিসি থেকে একটি ফ্লো ভেরিয়েবল হিসেবে উপলব্ধ থাকে।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার স্ট্রিং
মূল উপাদান <AssignVariable>
শিশু উপাদান কোনোটিই না

<Template> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s25

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

উদাহরণ ১ এস২৬

নিম্নলিখিত উদাহরণটি মেসেজ টেমপ্লেটিং সিনট্যাক্স ব্যবহার করে দুটি কনটেক্সট ভেরিয়েবলকে তাদের মধ্যে একটি লিটারেল স্ট্রিং (একটি হাইফেন) দিয়ে সংযুক্ত করে:

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

উদাহরণ ২ এস২৭

নিম্নলিখিত উদাহরণটি একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করে, যেখানে ভেরিয়েবলটির মান হলো একটি পূর্ব-নির্ধারিত মেসেজ টেমপ্লেট। পলিসি পরিবর্তন না করেই রানটাইমে একটি পূর্ব-নির্ধারিত টেমপ্লেট ইনজেক্ট করতে চাইলে এই অপশনটি ব্যবহার করুন:

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

উদাহরণ ৩ এস২৮

নিম্নলিখিত উদাহরণটি একটি ফ্লো ভেরিয়েবল এবং একটি টেক্সট ভ্যালু নির্দিষ্ট করে। এক্ষেত্রে, যদি রেফারেন্স করা ভেরিয়েবলটি নন-নাল (non-null) হয়, তবে সেই ভ্যালুটি টেমপ্লেট হিসেবে ব্যবহৃত হয়। আর যদি রেফারেন্স করা ভ্যালুটি নাল (null) হয়, তবে টেক্সট ভ্যালুটি (এই ক্ষেত্রে, {system.uuid}-{messageid} ) টেমপ্লেট হিসেবে ব্যবহৃত হয়। এই প্যাটার্নটি একটি "ওভাররাইড" ভ্যালু প্রদানের জন্য উপযোগী, যেখানে কিছু ক্ষেত্রে আপনি ডিফল্ট টেমপ্লেটকে (টেক্সট অংশ) ডায়নামিকভাবে সেট করা ভ্যালু দিয়ে ওভাররাইড করতে চান। উদাহরণস্বরূপ, একটি কন্ডিশনাল স্টেটমেন্ট একটি কী-ভ্যালু ম্যাপ থেকে একটি ভ্যালু নিয়ে রেফারেন্স করা ভেরিয়েবলটিকে সেই ভ্যালুতে সেট করতে পারে:

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

<Value> ( <AssignVariable> এর চাইল্ড)

<AssignVariable> দিয়ে সেট করা গন্তব্য ফ্লো ভেরিয়েবলের মান নির্ধারণ করে। মানটিকে সর্বদা একটি আক্ষরিক স্ট্রিং হিসাবে গণ্য করা হয়; আপনি মানটিকে বন্ধনীতে ("{}") রাখলেও, ফ্লো ভেরিয়েবলকে এর মান হিসাবে ব্যবহার করতে পারবেন না। ফ্লো ভেরিয়েবল ব্যবহার করতে, এর পরিবর্তে <Ref> ব্যবহার করুন।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার স্ট্রিং
মূল উপাদান <AssignVariable>
শিশু উপাদান কোনোটিই না

<Ref> এলিমেন্টের সাথে একত্রে ব্যবহৃত হলে, <Value> ডিফল্ট (বা ফলব্যাক) মান হিসেবে কাজ করে। যদি <Ref> নির্দিষ্ট করা না থাকে, সমাধানযোগ্য না হয়, বা null হয়, তাহলে <Value> এর মান ব্যবহৃত হয়।

<Value> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s29

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

উদাহরণ ১

নিম্নলিখিত উদাহরণটি ডেস্টিনেশন ফ্লো ভেরিয়েবল, myvar এর মান আক্ষরিক মান "42"-এ সেট করে:

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

উদাহরণ ২

নিম্নলিখিত উদাহরণটি request.header.user-agent ফ্লো ভেরিয়েবলের মান myvar ফ্লো ভেরিয়েবলে এবং country কোয়েরি প্যারামিটারের মান Country ভেরিয়েবলে নির্ধারণ করে:

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

যদি কোনো একটি অ্যাসাইনমেন্ট ব্যর্থ হয়, তাহলে <AssignVariable> তার পরিবর্তে গন্তব্য ফ্লো ভেরিয়েবলে "ErrorOnCopy" মানটি অ্যাসাইন করে।

<Copy>

source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা মেসেজ থেকে <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা মেসেজে ভ্যালুগুলো কপি করে। যদি আপনি <AssignTo> সাথে কোনো টার্গেট নির্দিষ্ট না করেন, তাহলে এই পলিসিটি ফ্লো-এর কোন পর্যায়ে কার্যকর হচ্ছে তার উপর নির্ভর করে ভ্যালুগুলো রিকোয়েস্ট বা রেসপন্সে কপি করে।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার স্ট্রিং
মূল উপাদান <AssignMessage>
শিশু উপাদান <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

যদি আপনি <Copy> এলিমেন্টের অধীনে কোনো চাইল্ড এলিমেন্ট নির্দিষ্ট না করেন, তাহলে এটি নির্ধারিত উৎস বার্তার সমস্ত অংশ কপি করবে।

<Copy> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s30

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

উদাহরণ ১ এস৩১

নিম্নলিখিত উদাহরণটি request মেসেজ থেকে একটি হেডার, তিনটি ফর্ম প্যারামিটার, পাথ এবং সমস্ত কোয়েরি প্যারামিটারকে newRequest নামের একটি নতুন, কাস্টম রিকোয়েস্টে কপি করে:

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

<Payload> এবং <Verb> এর মতো উপাদানগুলো উপস্থিত না থাকায়, পলিসিটি মেসেজের ঐ অংশগুলো কপি করে না।

উদাহরণ ২ এস৩২

নিম্নলিখিত উদাহরণটি প্রথমে বিদ্যমান response মেসেজ থেকে সবকিছু মুছে ফেলে, তারপর secondResponse নামক অন্য একটি মেসেজ থেকে সমস্ত ভ্যালু response মেসেজে কপি করে:

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

<Copy> এলিমেন্টটির একটিমাত্র অ্যাট্রিবিউট আছে:

বৈশিষ্ট্য বর্ণনা প্রয়োজন? প্রকার
উৎস

অনুলিপিটির উৎস বস্তু নির্দিষ্ট করে।

  • যদি source নির্দিষ্ট করা না থাকে, তবে এটি ডিফল্টভাবে ' message হয়, যার মান পলিসিটি যে ফ্লো-তে এক্সিকিউট হয় তার উপর নির্ভর করে ভিন্ন হয়। যদি পলিসিটি রিকোয়েস্ট ফ্লো-এর মধ্যে এক্সিকিউট হয়, তাহলে ' message ' ভ্যারিয়েবলটি request অবজেক্টকে নির্দেশ করে। যদি পলিসিটি রেসপন্স ফ্লো-এর মধ্যে এক্সিকিউট হয়, তাহলে message ' ভ্যারিয়েবলটি response অবজেক্টকে নির্দেশ করে।
  • যদি উৎস ভেরিয়েবলটি সমাধান করা না যায়, অথবা এটি কোনো নন-মেসেজ টাইপে সমাধান হয়, তাহলে <Copy> সাড়া দিতে ব্যর্থ হয়।
ঐচ্ছিক স্ট্রিং

<FormParams> ( <Copy> এর চাইল্ড)

<Copy> এলিমেন্টের source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা রিকোয়েস্ট থেকে ফর্ম প্যারামিটারগুলো <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা রিকোয়েস্টে কপি করে। এই এলিমেন্টটি রেসপন্সের উপর কোনো প্রভাব ফেলে না।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার <FormParam> উপাদানগুলির অ্যারে অথবা একটি খালি অ্যারে
মূল উপাদান <Copy>
শিশু উপাদান <FormParam>

<FormParams> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s33

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

উদাহরণ ১ এস৩৪

নিম্নলিখিত উদাহরণটি রিকোয়েস্ট থেকে 'MyCustomRequest' নামক কাস্টম রিকোয়েস্টে একটি একক ফর্ম প্যারামিটার কপি করে:

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

উদাহরণ ২ এস৩৫

নিম্নলিখিত উদাহরণটি সমস্ত ফর্ম প্যারামিটার 'MyCustomRequest' কাস্টম অনুরোধটিতে কপি করে:

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

উদাহরণ ৩ এস৩৬

নিম্নলিখিত উদাহরণটি 'MyCustomRequest' নামক কাস্টম রিকোয়েস্টে তিনটি ফর্ম প্যারামিটার কপি করে:

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

উদাহরণ ৪ এস৩৭

যদি একই নামের একাধিক ফর্ম প্যারামিটার থাকে, তাহলে নিম্নলিখিত সিনট্যাক্সটি ব্যবহার করুন:

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

এই উদাহরণটি 'f1', 'f2' এবং 'f3'-এর দ্বিতীয় মানটি কপি করে। যদি 'f3'-তে কেবল একটিই মান থাকে, তবে সেটি কপি করা হয় না।

আপনি <FormParams> শুধুমাত্র তখনই ব্যবহার করতে পারবেন যখন নিম্নলিখিত শর্তগুলো পূরণ হবে:

  • HTTP ক্রিয়া: পোস্ট
  • বার্তার ধরণ: প্রতিক্রিয়া
  • নিম্নলিখিতগুলির মধ্যে একটি (বা উভয়ই):
    • ফর্ম ডেটা: কোনো একটি মানে সেট করুন, অথবা খালি স্ট্রিং (") দিন। উদাহরণস্বরূপ, curl ব্যবহার করার সময়, আপনার অনুরোধে -d "" যোগ করুন।
    • Content-Length হেডার: এর মান 0 সেট করুন (যদি মূল অনুরোধে কোনো ডেটা না থাকে); অন্যথায়, বর্তমান দৈর্ঘ্য। উদাহরণস্বরূপ, curl ব্যবহার করে আপনার অনুরোধে -H "Content-Length: 0" যোগ করুন।

আপনি যখন <FormParams> কপি করেন, তখন <Copy> টার্গেট সার্ভিসে মেসেজটি পাঠানোর আগে মেসেজটির Content-Type "application/x-www-form-urlencoded"-এ সেট করে দেয়।

<Headers> ( <Copy> এর চাইল্ড)

<Copy> এলিমেন্টের source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা রিকোয়েস্ট বা রেসপন্স মেসেজ থেকে HTTP হেডারগুলো <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা রিকোয়েস্ট বা রেসপন্স মেসেজে কপি করে।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার <Header> উপাদানগুলির একটি অ্যারে অথবা একটি খালি অ্যারে
মূল উপাদান <Copy>
শিশু উপাদান <Header>

<Headers> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s38

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

উদাহরণ ১ s39

নিম্নলিখিত উদাহরণটি রিকোয়েস্ট থেকে 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>

উদাহরণ ২ s40

সমস্ত হেডার কপি করতে, একটি খালি <Headers> এলিমেন্ট ব্যবহার করুন, যেমনটি নিচের উদাহরণে দেখানো হয়েছে:

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

উদাহরণ ৩ এস৪১

একই নামের একাধিক হেডার থাকলে, নিম্নলিখিত সিনট্যাক্সটি ব্যবহার করুন:

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

এই উদাহরণটি 'h1', 'h2' এবং 'h3'-এর দ্বিতীয় মানটি কপি করে। যদি 'h3'-তে কেবল একটিই মান থাকে, তবে সেটি কপি করা হয় না।

<Path> ( <Copy> এর চাইল্ড)

সোর্স রিকোয়েস্ট থেকে ডেস্টিনেশন রিকোয়েস্টে পাথটি কপি করা হবে কিনা তা এটি নির্ধারণ করে। রেসপন্সের উপর এই এলিমেন্টটির কোনো প্রভাব নেই।

'true' হলে, এই পলিসিটি <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>

উদাহরণ ১ এস৪২

নিম্নলিখিত উদাহরণটি নির্দেশ করে যে AssignMessage পলিসিটি সোর্স রিকোয়েস্ট থেকে পাথটি নতুন, কাস্টম রিকোয়েস্ট অবজেক্টে কপি করবে:

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

আপনি <Path> শুধুমাত্র তখনই ব্যবহার করতে পারবেন যখন নিম্নলিখিত শর্তগুলো পূরণ হবে:

  • বার্তার ধরণ: অনুরোধ

<Payload> ( <Copy> -এর চাইল্ড)

পেলোডটি উৎস থেকে গন্তব্যে অনুলিপি করা হবে কিনা তা নির্ধারণ করে। উৎস এবং গন্তব্য অনুরোধ বা প্রতিক্রিয়া হতে পারে।

'true' হলে, এই পলিসিটি <Copy> এলিমেন্টের source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট মেসেজ থেকে পেলোডটি <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট মেসেজে কপি করে।

ডিফল্ট মান মিথ্যা
প্রয়োজন? ঐচ্ছিক
প্রকার বুলিয়ান
মূল উপাদান <Copy>
শিশু উপাদান কোনোটিই না

<Payload> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s43

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

উদাহরণ ১ এস৪৪

নিম্নলিখিত উদাহরণটি <Payload> "true" তে সেট করে, যাতে রিকোয়েস্ট পেলোডটি রিকোয়েস্ট থেকে রেসপন্সে কপি করা হয়:

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

<QueryParams> ( <Copy> এর চাইল্ড)

<Copy> এলিমেন্টের source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা রিকোয়েস্ট থেকে কোয়েরি স্ট্রিং প্যারামিটারগুলো <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা রিকোয়েস্টে কপি করে। এই এলিমেন্টটি রেসপন্সের উপর কোনো প্রভাব ফেলে না।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার <QueryParam> উপাদানবিশিষ্ট একটি অ্যারে অথবা একটি খালি অ্যারে
মূল উপাদান <QueryParam>
শিশু উপাদান কোনোটিই না

<QueryParams> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s45

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

উদাহরণ ১ এস৪৬

নিম্নলিখিত উদাহরণটি রিকোয়েস্ট থেকে 'my_param' কোয়েরি প্যারামিটারটিকে একটি নতুন, কাস্টম রিকোয়েস্ট অবজেক্টে কপি করে:

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

উদাহরণ ২ এস৪৭

নিম্নলিখিত উদাহরণটি রিকোয়েস্ট থেকে সমস্ত কোয়েরি প্যারামিটার একটি নতুন, কাস্টম রিকোয়েস্ট অবজেক্টে কপি করে:

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

উদাহরণ ৩ এস৪৮

যদি একই নামের একাধিক কোয়েরি প্যারামিটার থাকে, তাহলে নিম্নলিখিত সিনট্যাক্সটি ব্যবহার করুন:

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

এই উদাহরণটি 'qp1', 'qp2' এবং 'qp3'-এর দ্বিতীয় মানটি কপি করে। যদি 'qp3'-এর কেবল একটিই মান থাকে, তবে সেটি কপি করা হয় না।

আপনি <QueryParams> শুধুমাত্র তখনই ব্যবহার করতে পারবেন যখন নিম্নলিখিত শর্তগুলো পূরণ হবে:

  • HTTP ক্রিয়া: GET
  • বার্তার ধরণ: অনুরোধ

<ReasonPhrase> ( <Copy> এর চাইল্ড)

কারণ বাক্যাংশটি উৎস প্রতিক্রিয়া থেকে গন্তব্য প্রতিক্রিয়ায় অনুলিপি করা হবে কিনা তা নির্ধারণ করে। এই উপাদানটির একটি অনুরোধের উপর কোনো প্রভাব নেই।

'true' হলে, এই পলিসিটি <Copy> এলিমেন্টের source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট রেসপন্স থেকে ReasonPhrase কে <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট রেসপন্সে কপি করে।

ডিফল্ট মান মিথ্যা
প্রয়োজন? ঐচ্ছিক
প্রকার বুলিয়ান
মূল উপাদান <Copy>
শিশু উপাদান কোনোটিই না

<ReasonPhrase> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s49

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

উদাহরণ ১ s50

নিম্নলিখিত উদাহরণটি <ReasonPhrase> -কে true সেট করে। নির্দিষ্ট করা সোর্স এবং <AssignTo> এলিমেন্টের সাহায্যে, এটি <Copy> ফাংশনকে নির্দিষ্ট রেসপন্স মেসেজ থেকে কারণ বাক্যটি response অবজেক্টে কপি করতে নির্দেশ দেয়:

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

আপনি <ReasonPhrase> শুধুমাত্র তখনই ব্যবহার করতে পারবেন যখন উৎস এবং গন্তব্য বার্তাগুলো Response টাইপের হবে।

<StatusCode> ( <Copy> এর চাইল্ড)

সোর্স রেসপন্স থেকে ডেস্টিনেশন রেসপন্সে স্ট্যাটাস কোড কপি করা হবে কিনা, তা এটি নির্ধারণ করে। কোনো রিকোয়েস্টের উপর এই এলিমেন্টটির কোনো প্রভাব নেই।

If "true", this policy copies the status code from the response message specified by the <Copy> element's source attribute to the response message specified by the <AssignTo> element.

ডিফল্ট মান মিথ্যা
প্রয়োজন? ঐচ্ছিক
প্রকার বুলিয়ান
মূল উপাদান <Copy>
শিশু উপাদান কোনোটিই না

The <StatusCode> element uses the following syntax:

Syntax s52

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

Example 1 s53

The following example sets <StatusCode> to "true", which copies the status code from the default response object to a new, custom response object:

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

You can use <StatusCode> only when the source and destination messages are of type Response.

A common use of <StatusCode> is to set the proxy response status code to a different value than that received from the target.

<Verb> (child of <Copy> )

Determines whether the HTTP verb is copied from the source request to the destination request. This element has no effect on a response.

If "true", copies the verb found in the <Copy> element's source attribute to the request specified in the <AssignTo> element.

ডিফল্ট মান মিথ্যা
প্রয়োজন? ঐচ্ছিক
প্রকার বুলিয়ান
মূল উপাদান <Copy>
শিশু উপাদান কোনোটিই না

The <Verb> element uses the following syntax:

Syntax s54

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

Example 1 s55

The following example sets <Verb> to "true", which copies the verb from the default request to a new, custom request:

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

You can use <Verb> only when the following criteria are met:

  • Message type: Request

<Version> (child of <Copy> )

Determines whether the HTTP version is copied from the source request to the destination request. This element has no effect on a response.

If "true", copies the HTTP version found in the <Copy> element's source attribute to the object specified by the <AssignTo> element.

ডিফল্ট মান মিথ্যা
প্রয়োজন? ঐচ্ছিক
প্রকার বুলিয়ান
মূল উপাদান <Copy>
শিশু উপাদান কোনোটিই না

The <Version> element uses the following syntax:

Syntax s56

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

Example 1 s57

The following example sets <Version> to "true" on the request, which copies the version from the default request object to a new, custom request object:

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

You can use <Version> only when the following criteria are met:

  • Message type: Request

<DisplayName>

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, আরও স্বাভাবিক-শব্দযুক্ত নামের সাথে লেবেল করতে name বৈশিষ্ট্যের পাশাপাশি ব্যবহার করুন৷

<DisplayName> উপাদানটি সকল নীতিতে সাধারণ।

ডিফল্ট মান n/a
প্রয়োজন? ঐচ্ছিক। আপনি <DisplayName> বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হয়
টাইপ স্ট্রিং
অভিভাবক উপাদান < PolicyElement >
শিশু উপাদান কোনোটিই নয়

<DisplayName> উপাদানটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স

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

উদাহরণ

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

<DisplayName> উপাদানটির কোনো বৈশিষ্ট্য বা শিশু উপাদান নেই।

<IgnoreUnresolvedVariables>

কোনো অমীমাংসিত ভেরিয়েবলের সম্মুখীন হলে প্রসেসিং বন্ধ হবে কিনা তা নির্ধারণ করে।

ডিফল্ট মান মিথ্যা
প্রয়োজন? ঐচ্ছিক
প্রকার বুলিয়ান
মূল উপাদান <AssignMessage>
শিশু উপাদান কোনোটিই না

Set to true to ignore unresolved variables and continue processing; otherwise false . The default value is false .

Setting <IgnoreUnresolvedVariables> to true is different from setting the <AssignMessage> 's continueOnError to true in that it is specific to setting and getting values of variables. If you set continueOnError to true , then Edge ignores all errors, not just errors encountered when using variables.

<IgnoreUnresolvedVariables> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

Syntax s58

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

Example 1 s59

The following example sets <IgnoreUnresolvedVariables> to "true":

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

Because <IgnoreUnresolvedVariables> is set to true , if the possibly-defined-variable variable is not defined, this policy will not throw a fault.

<Remove>

Removes headers, query parameters, form parameters, and/or the message payload from a message. The message can be a request or a response. You specify which message <Remove> acts on by using the <AssignTo> element.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার জটিল প্রকার
মূল উপাদান <AssignMessage>
শিশু উপাদান <FormParams>
<Headers>
<Payload>
<QueryParams>

A common use case for <Remove> is to delete a query parameter or header that contains sensitive information from the incoming request object, to avoid passing it to the backend server.

The <Remove> element uses the following syntax:

Syntax s60

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

Example 1 s61

The following example removes the message's body from the response:

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

In the response flow, this policy removes the body of the response, returning only HTTP headers to the client.

Example 2 s62

The following example removes all form parameters and a query parameter from the request object:

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

Example 3 s63

The following example removes everything from a message object:

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

Typically you would do this only if you were going to use the <Set> element or the <Copy> element to set some replacement values in the message.

<FormParams> (child of <Remove> )

Removes the specified form parameters from the request. This element has no effect on a response.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার Array of <FormParam> elements or an empty array
মূল উপাদান <Remove>
শিশু উপাদান <FormParam>

The <FormParams> element uses the following syntax:

Syntax s64

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

Example 1 s65

The following example removes three form parameters from the request:

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

Example 2 s66

The following example removes all form parameters from the request:

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

Example 3 s67

If there are multiple form params with the same name, use the following syntax:

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

This example removes "f1", "f2", and the second value of "f3". If "f3" has only one value, then it is not removed.

You can use <FormParams> only when the following criteria are met:

  • Message type: Request
  • Content-Type : "application/x-www-form-urlencoded"

<Headers> (child of <Remove> )

Removes the specified HTTP headers from the request or response, which is specified by the <AssignTo> element.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার Array of <Header> elements or an empty array
মূল উপাদান <Remove>
শিশু উপাদান <Header>

The <Headers> element uses the following syntax:

সিনট্যাক্স

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

Example 1 s68

The following example removes the user-agent header from the request:

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

Example 2 s69

The following example removes all headers from the request:

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

Example 3 s70

If there are multiple headers with the same name, use the following syntax:

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

This example removes "h1", "h2", and the second value of "h3" from the request. If "h3" has only one value, then it is not removed.

<Payload> (child of <Remove> )

Determines whether <Remove> deletes the payload in the request or response, which is specified by the <AssignTo> element. Set to "true" to clear the payload; otherwise "false". The default value is "false".

ডিফল্ট মান মিথ্যা
প্রয়োজন? ঐচ্ছিক
প্রকার বুলিয়ান
মূল উপাদান <Remove>
শিশু উপাদান কোনোটিই না

The <Payload> element uses the following syntax:

সিনট্যাক্স

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

Example 1 s71

The following example sets <Payload> to "true" so that the request payload is cleared:

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

<QueryParams> (child of <Remove> )

Removes the specified query parameters from the request. This element has no effect on a response.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার Array of <QueryParam> elements or an empty array
মূল উপাদান <Remove>
শিশু উপাদান <QueryParam>

The <QueryParams> element uses the following syntax:

Syntax s72

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

Example 1 s73

The following example removes a single query parameter from the request:

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

Example 2 s74

The following example removes all query parameters from the request:

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

Example 3 s75

If there are multiple query params with the same name, use the following syntax:

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

This example removes "qp1", "qp2", and the second value of "qp3" from the request. If "qp3" has only one value, then it is not removed.

Example 4 s76

The following example removes the apikey query parameter from the request:

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

You can use <QueryParams> only when the following criteria are met:

  • HTTP verb: GET
  • Message type: Request

<Set>

Sets information in the request or response message, which is specified by the <AssignTo> element. <Set> overwrites headers or query or form parameters that already exist in the original message. Headers and query and form parameters in an HTTP message may hold multiple values. To add additional values for a header or parameter, use the <Add> element instead.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার জটিল প্রকার
মূল উপাদান <AssignMessage>
শিশু উপাদান <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

The <Set> element uses the following syntax:

সিনট্যাক্স

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

Example 1 s77

The following example sets a specific header. When this policy is attached in the Request flow, it will allow the upstream system to receive an additional header that was not included in the original inbound request.

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

Example 2 s78

The following example overwrites the payload for a response, as well as the Content-Type header.

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

<FormParams> (child of <Set> )

Overwrites existing form parameters on a request and replaces them with the new values that you specify with this element. This element has no effect on a response.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার Array of <FormParam> elements
মূল উপাদান <Set>
শিশু উপাদান <FormParam>

The <FormParams> element uses the following syntax:

Syntax s79

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

Example 1 s80

The following example sets a form parameter called "myparam" to the value of the request.header.myparam variable in a new, custom request:

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

You can use <FormParams> only when the following criteria are met:

  • HTTP verb: POST
  • Message type: Request

If you define empty form parameters in your policy ( <Add><FormParams/></Add> ), the policy does not add any form parameters. This is the same as omitting the <FormParams> .

<Set> changes the Content-Type of the message to "application/x-www-form-urlencoded" before sending it to the target endpoint.

<Headers> (child of <Set> )

Overwrites existing HTTP headers in the request or response, which is specified by the <AssignTo> element.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার Array of <Header> elements
মূল উপাদান <Set>
শিশু উপাদান <Header>

The <Headers> element uses the following syntax:

Syntax s81

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

Example 1 s81

The following example sets the x-ratelimit-remaining header to the value of the ratelimit.Quota-1.available.count variable:

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

If you define empty headers in your policy ( <Set><Headers/></Set> ), the policy does not set any headers. This will have the same effect as omitting <Headers> .

<Path> (child of <Set> )

<Payload> (child of <Set> )

Defines the message body for a request or response, which is specified by the <AssignTo> element. The payload can be any valid content type, such as plain text, JSON, or XML.

ডিফল্ট মান খালি স্ট্রিং
প্রয়োজন? ঐচ্ছিক
প্রকার স্ট্রিং
মূল উপাদান <Set>
শিশু উপাদান কোনোটিই না

The <Payload> element uses the following syntax:

Syntax s82

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

Example 1 s83

The following example sets a plain text payload:

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

Example 2 s84

The following example sets a JSON payload:

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

Example 3 s85

The following example inserts variable values into the payload by wrapping variable names in curly braces:

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

In previous versions of Apigee, you could not use curly braces to denote variable references within JSON payloads. In those releases, you needed to use the variablePrefix and variableSuffix attributes to specify delimiter characters, and use those to wrap variable names, like so:

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

This older syntax still works.

Example 4 s86

The content of <Payload> is treated as a message template. This means that the AssignMessage policy replaces variables wrapped in curly braces with the value of the referenced variables at runtime.

The following example uses the curly braces syntax to set part of the payload to a variable value:

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

The following table describes the attributes of <Payload> :

বৈশিষ্ট্য বর্ণনা উপস্থিতি প্রকার
contentType

If specified, the value of contentType is assigned to the Content-Type HTTP header.

ঐচ্ছিক স্ট্রিং
variablePrefix Optionally specifies the leading delimiter on a flow variable. Defaults to "{". For more information, see Flow variables reference . ঐচ্ছিক চার
variableSuffix Optionally specifies the trailing delimiter on a flow variable. Defaults to "}". For more information, see Flow variables reference . ঐচ্ছিক চার

<QueryParams> (child of <Set> )

Overwrites existing query parameters in the request with new values. This element has no effect on a response.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার Array of <QueryParam> elements
মূল উপাদান <Set>
শিশু উপাদান <QueryParam>

The <QueryParams> element uses the following syntax:

Syntax s87

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

Example 1 s88

The following example sets the "address" query parameter to the value of the request.header.address variable:

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

You can use <QueryParams> only when the following criteria are met:

  • HTTP verb: GET
  • Message type: Request

If you define empty query parameters in your policy ( <Set><QueryParams/></Set> ), the policy does not set any query parameters. This is the same as omitting <QueryParams> .

<ReasonPhrase> (child of <Set> )

Sets the reason phrase on the response. This is normally done for debugging in combination with <StatusCode> . This element has no effect on a request.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার স্ট্রিং
মূল উপাদান <Set>
শিশু উপাদান কোনোটিই না

The <ReasonPhrase> element uses the following syntax:

Syntax s89

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

Example 1 s90

The following example defines a simple reason phrase:

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

Example 2 s91

The content of <ReasonPhrase> is treated as a message template. This means a variable name wrapped in curly braces will be replaced at runtime with the value of the referenced variable, as the following example shows:

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

You can use <ReasonPhrase> only when the following criteria are met:

  • Message type: Response

<StatusCode> (child of <Set> )

Sets the status code on the response. This element has no effect on a request.

ডিফল্ট মান '200' (when <AssignTo> 's createNew attribute is set to 'true')
প্রয়োজন? ঐচ্ছিক
প্রকার String or variable
মূল উপাদান <Set>
শিশু উপাদান কোনোটিই না

The <StatusCode> element uses the following syntax:

Syntax s92

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

উদাহরণ ১

The following example sets a simple status code:

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

উদাহরণ ২

The content of <StatusCode> is treated as a message template. This means a variable name wrapped in curly braces will be replaced at runtime with the value of the referenced variable, as the following example shows:

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

You can use <StatusCode> only when the following criteria are met:

  • Message type: Response

<Verb> (child of <Set> )

Sets the HTTP verb on the request. This element has no effect on a response.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার String or variable
মূল উপাদান <Set>
শিশু উপাদান কোনোটিই না

The <Verb> element uses the following syntax:

সিনট্যাক্স

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

Example 1 s93

The following example sets a simple verb on the request:

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

Example 2 s94

The content of <Verb> is treated as a message template. This means a variable name wrapped in curly braces will be replaced at runtime with the value of the referenced variable.

The following example uses a variable to populate a verb:

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

You can use <Verb> only when the following criteria are met:

  • Message type: Request

<Version> (child of <Set> )

Sets the HTTP version on a request. This element has no effect on a response.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
প্রকার String or variable
মূল উপাদান <Set>
শিশু উপাদান কোনোটিই না

The <Version> element uses the following syntax:

Syntax s95

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

Example 1 s96

The following example sets the version number to "1.1":

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

উদাহরণ ২

The following uses a variable in curly braces to set the version number:

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

The content of <Version> is treated as a message template. This means a variable name wrapped in curly braces will be replaced at runtime with the value of the referenced variable.

You can use <Version> only when the following criteria are met:

  • Message type: Request

The following example creates a custom request object with Assign Message:

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

This example:

  • Creates a new request message object called "MyCustomRequest".
  • On MyCustomRequest, this policy:
    • Copies the value of the user-agent HTTP header from the incoming request to the new message. Because <Copy> uses an absolute reference to the user-agent flow variable, there is no need to specify the source attribute to <Copy> .
    • Sets the address query parameter on the custom message to the value of the incoming request's addy query parameter.
    • Sets the HTTP verb to GET .
  • Sets <IgnoreUnresolvedVariables> to "false". When <IgnoreUnresolvedVariables> is "false", if one of the variables the policy tries to add does not exist, Edge will stop processing in the API flow.