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

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান
তথ্য

কি

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

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

AssignMessage নীতির সাহায্যে, আপনি সাধারণত অনুরোধ বা প্রতিক্রিয়ার বৈশিষ্ট্য যোগ, পরিবর্তন বা অপসারণ করতে পারেন। তবে, আপনি AssignMessage নীতি ব্যবহার করে একটি কাস্টম অনুরোধ বা প্রতিক্রিয়া বার্তা তৈরি করতে পারেন এবং এটি একটি বিকল্প লক্ষ্যে প্রেরণ করতে পারেন, যেমনটি Create custom request messages এ বর্ণিত হয়েছে।

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

<AssignMessage> উপাদান

একটি AssignMessage নীতি সংজ্ঞায়িত করে।

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

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

বাক্য গঠন

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

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

ডিফল্ট নীতি

Edge 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> এলিমেন্টে উল্লেখিত মেসেজ ভেরিয়েবল থেকে নির্দিষ্ট এলিমেন্টগুলো মুছে ফেলে।
<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 নির্দিষ্ট করা হয়েছে, এই নীতিটি সেই প্রতিক্রিয়া বস্তুকে পরিবর্তন করে যা মূলত লক্ষ্য সার্ভার দ্বারা ফেরত পাঠানো ডেটা দিয়ে সেট করা হয়েছিল।

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

৪: গতিশীল কন্টেন্ট সেট করুন

আপনি প্রতিক্রিয়া এবং অনুরোধ বার্তার পেলোডে গতিশীল বিষয়বস্তু এম্বেড করতে অ্যাসাইন মেসেজ ব্যবহার করতে পারেন।

XML পেলোডে এজ ফ্লো ভেরিয়েবল এম্বেড করতে, নির্ধারিত ভেরিয়েবলটিকে কোঁকড়া বন্ধনীতে মুড়ে দিন, যেমন: {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 পেলোডের জন্য, আপনি নিম্নলিখিত উদাহরণে দেখানো হিসাবে delimiter অক্ষর সহ 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 পেলোড তৈরি করে যা এজ ক্লায়েন্টকে ফেরত দেয়:
    <!-- 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. আপনার API প্রক্সিতে একটি অনুরোধ পাঠান; উদাহরণস্বরূপ:
    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>

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

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

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

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

{calloutResponse.header.Set-Cookie.values}

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

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

এই বিভাগটি <AssignMessage> এর চাইল্ড এলিমেন্টগুলি বর্ণনা করে।

<Add>

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

<Add> এলিমেন্টটি বার্তায় নতুন বৈশিষ্ট্য যুক্ত করে যা মূল বার্তায় বিদ্যমান নয়। বিদ্যমান বৈশিষ্ট্যের মান পরিবর্তন করতে, <Set> এলিমেন্টটি ব্যবহার করুন।

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

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

সিনট্যাক্স s1

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

উদাহরণ ১ s২

নিচের উদাহরণে <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>

উদাহরণ ২ s৩

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

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

উদাহরণ ৩ s৪

নিচের উদাহরণে <QueryParams> এলিমেন্ট ব্যবহার করে অনুরোধে একটি স্ট্যাটিক মান সহ একটি একক কোয়েরি প্যারামিটার যোগ করা হয়েছে:

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

এই উদাহরণে অনুরোধ প্রিফ্লোতে <Add> ব্যবহার করা হয়েছে। যদি আপনি Trace টুলের মতো একটি টুলে ফলাফল দেখেন, তাহলে 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>

উদাহরণ ১ s৬

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

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

উদাহরণ 2 s7

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

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

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

উদাহরণ ৩ s8

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

<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 পরিবর্তিত অনুরোধটি লক্ষ্য এন্ডপয়েন্টে পাঠাবে।

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

username=nick&zip_code=90210&default_language=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> এলিমেন্টটি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

সিনট্যাক্স s9

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

উদাহরণ ১ s১০

নিচের উদাহরণটি অনুরোধ বার্তায় একটি 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>

উদাহরণ ১ s১২

নিচের উদাহরণটি অনুরোধে "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 নীতি কোন বস্তুর উপর কাজ করে তা নির্ধারণ করে। বিকল্পগুলি হল:

  • অনুরোধ বার্তা: API প্রক্সি দ্বারা প্রাপ্ত 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>

উদাহরণ ১ s১৪

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

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

উদাহরণ ২ s15

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

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

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

আপনি পরবর্তীকালে অন্যান্য নীতিতে নতুন অনুরোধ বস্তুটি অ্যাক্সেস করতে পারেন, অথবা একটি ServiceCallout নীতি সহ একটি বহিরাগত পরিষেবাতে নতুন অনুরোধ বস্তুটি পাঠাতে পারেন।

উদাহরণ ৩ s১৬

নিম্নলিখিত উদাহরণটি "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 মানের উপর ভিত্তি করে একটি নতুন অনুরোধ বা প্রতিক্রিয়া বস্তু তৈরি করে।

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

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

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

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

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

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

ঐচ্ছিক স্ট্রিং
type যখন createNew "true" হয়, তখন নতুন বার্তার ধরণ নির্দিষ্ট করে। বৈধ মান হল "অনুরোধ" অথবা "প্রতিক্রিয়া"।

যদি আপনি এই বৈশিষ্ট্যটি বাদ দেন, তাহলে Edge একটি অনুরোধ অথবা একটি প্রতিক্রিয়া তৈরি করে, যা এই নীতিটি কোন প্রবাহে কার্যকর করা হয় তার উপর নির্ভর করে।

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

<AssignVariable>

একটি flow ভেরিয়েবলের জন্য একটি মান নির্ধারণ করে। যদি flow ভেরিয়েবলটি বিদ্যমান না থাকে, তাহলে <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> সংজ্ঞায়িত করেন, তাহলে এটি অন্যান্য চাইল্ড উপাদানের উপর অগ্রাধিকার পাবে।

উদাহরণ ১ s18

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

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

উদাহরণ ২ s19

নিচের উদাহরণটি ফ্লো ভেরিয়েবল request.header.user-agent এর মান myvar ডেস্টিনেশন ফ্লো ভেরিয়েবলে এবং country এর কোয়েরি প্যারামিটারের মান denistation flow ভেরিয়েবলে নির্ধারণ করে 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 flow ভেরিয়েবল বিদ্যমান না থাকে, তাহলে <AssignVariable> এগুলি তৈরি করে।

উদাহরণ ৩ s20

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

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

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

<Name> ( <AssignVariable> এর সন্তান)

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

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

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

সিনট্যাক্স s21

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

উদাহরণ ১ s২২

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

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

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

<Ref> ( <AssignVariable> এর সন্তান)

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

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

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

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

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>

উদাহরণ ১ s২৩

নিচের উদাহরণটি myvar গন্তব্য প্রবাহ ভেরিয়েবলের জন্য request.header.user-agent ভেরিয়েবলের মান এবং Country ভেরিয়েবলের জন্য query প্যারামিটার 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-এর কোনও অ্যাসাইনমেন্টের জন্যই কোনও ডিফল্ট (অথবা ফলব্যাক মান) নির্দিষ্ট করা নেই।

উদাহরণ ২ s23

নিচের উদাহরণটি myvar গন্তব্য প্রবাহ ভেরিয়েবলের জন্য request.header.user-agent ভেরিয়েবলের মান এবং Country ভেরিয়েবলের জন্য query প্যারামিটার 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 query প্যারামিটারের মান null, unreadable, অথবা malformed হয়, তাহলে Edge নতুন ভেরিয়েবলগুলিতে "ErrorOnCopy" মান নির্ধারণ করে।

উদাহরণ ৩ s24

<AssignVariable> এর একটি সাধারণ ব্যবহারের ক্ষেত্রে হল একটি কোয়েরি প্যারামিটার, হেডার, অথবা অনুরোধের সাথে পাস করা যেতে পারে এমন অন্যান্য মানের ডিফল্ট মান সেট করা। উদাহরণস্বরূপ, আপনি একটি আবহাওয়া API প্রক্সি তৈরি করেন যেখানে অনুরোধটি "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 এর মান পায় এবং এটিকে নিজের জন্য বরাদ্দ করে। যদি flow ভেরিয়েবলটি null হয়, অর্থাৎ "w" কোয়েরি প্যারামিটারটি অনুরোধ থেকে বাদ দেওয়া হয়, তাহলে এই উদাহরণটি <Value> উপাদান থেকে ডিফল্ট মান ব্যবহার করে। অতএব, আপনি এই API প্রক্সিতে একটি অনুরোধ করতে পারেন যা "w" কোয়েরি প্যারামিটারটি বাদ দেয়:

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

...এবং এখনও API প্রক্সি একটি বৈধ ফলাফল প্রদান করে।

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

যদি আপনি এমন একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করেন যা <Ref> এর মানের জন্য বিদ্যমান না থাকে এবং <IgnoreUnresolvedVariables> এর মান "true" হয়, তাহলে Edge একটি ত্রুটি ছুঁড়ে দেয়।

<Template> ( <AssignVariable> এর সন্তান)

একটি বার্তা টেমপ্লেট নির্দিষ্ট করে। একটি বার্তা টেমপ্লেট আপনাকে নীতি কার্যকর করার সময় পরিবর্তনশীল স্ট্রিং প্রতিস্থাপন সম্পাদন করতে দেয় এবং কার্লি ব্রেসগুলিতে মোড়ানো পরিবর্তনশীল নামের সাথে আক্ষরিক স্ট্রিংগুলিকে একত্রিত করতে পারে। এছাড়াও, বার্তা টেমপ্লেটগুলি এস্কেপিং এবং কেস রূপান্তরের মতো ফাংশনগুলিকে সমর্থন করে।

ref অ্যাট্রিবিউট ব্যবহার করে একটি ফ্লো ভ্যারিয়েবল নির্দিষ্ট করুন যেখানে ভ্যারিয়েবলের মান একটি মেসেজ টেমপ্লেট। উদাহরণস্বরূপ, আপনি একটি ডেভেলপার অ্যাপে একটি কাস্টম অ্যাট্রিবিউট হিসেবে একটি মেসেজ টেমপ্লেট সংরক্ষণ করতে পারেন। যখন এজ ডেভেলপার অ্যাপটিকে 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>

উদাহরণ ১ s২৬

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

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

উদাহরণ ২ s27

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

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

উদাহরণ ৩ s28

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

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

<Value> ( <AssignVariable> এর সন্তান)

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

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

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

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

সিনট্যাক্স s29

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

উদাহরণ ১

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

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

উদাহরণ ২

নিচের উদাহরণটি myvar ফ্লো ভেরিয়েবলের জন্য request.header.user-agent এর মান এবং Country ভেরিয়েবলের জন্য query প্যারামিটার 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>
  

উদাহরণ ১ s31

নিচের উদাহরণটি 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> এর মতো উপাদানগুলি উপস্থিত নেই, তাই নীতিটি বার্তার সেই অংশগুলি অনুলিপি করে না।

উদাহরণ ২ s32

নিচের উদাহরণটি প্রথমে বিদ্যমান 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> এর সন্তান)

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

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
আদর্শ <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>

উদাহরণ ১ s34

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

উদাহরণ ২ s35

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

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

উদাহরণ ৩ s36

নিম্নলিখিত উদাহরণটি "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>

উদাহরণ ৪ s37

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

<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> এলিমেন্ট দ্বারা নির্দিষ্ট অনুরোধ বা প্রতিক্রিয়া বার্তার জন্য <AssignTo> এলিমেন্টের source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট অনুরোধ বা প্রতিক্রিয়া বার্তা থেকে HTTP হেডারগুলি অনুলিপি করে।

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
আদর্শ <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>

উদাহরণ ৩ s41

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

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

উদাহরণ ১ s42

নিম্নলিখিত উদাহরণটি ইঙ্গিত করে যে 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>

উদাহরণ ১ s44

নিচের উদাহরণটি <Payload> "true" তে সেট করে যাতে অনুরোধের পেলোডটি অনুরোধ থেকে প্রতিক্রিয়াতে অনুলিপি করা হয়:

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

<QueryParams> ( <Copy> এর সন্তান)

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

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
আদর্শ <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>

উদাহরণ ১ s46

নিম্নলিখিত উদাহরণটি অনুরোধ থেকে "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>

উদাহরণ ২ s47

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

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

উদাহরণ ৩ s48

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

<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 বৈশিষ্ট্য দ্বারা নির্দিষ্ট প্রতিক্রিয়া থেকে <AssignTo> উপাদান দ্বারা নির্দিষ্ট প্রতিক্রিয়াতে ReasonPhrase কপি করে।

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

The <ReasonPhrase> element uses the following syntax:

Syntax s49

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

Example 1 s50

The following example sets <ReasonPhrase> to true . With the source and <AssignTo> element as specified, this causes <Copy> to copy the reason phrase from the named response message to the response object:

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

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

<StatusCode> (child of <Copy> )

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

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.

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

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.

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

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.

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

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>

Determines whether processing stops when an unresolved variable is encountered.

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

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.

The <IgnoreUnresolvedVariables> element uses the following syntax:

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.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
আদর্শ জটিল প্রকার
Parent Element <AssignMessage>
Child Elements <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
Parent Element <Remove>
Child Elements <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
Parent Element <Remove>
Child Elements <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".

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

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
Parent Element <Remove>
Child Elements <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.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
আদর্শ জটিল প্রকার
Parent Element <AssignMessage>
Child Elements <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
Parent Element <Set>
Child Elements <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
Parent Element <Set>
Child Elements <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.

ডিফল্ট মান empty string
প্রয়োজন? ঐচ্ছিক
আদর্শ স্ট্রিং
Parent Element <Set>
Child Elements কোনটিই নয়

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
Parent Element <Set>
Child Elements <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.

ডিফল্ট মান প্রযোজ্য নয়
প্রয়োজন? ঐচ্ছিক
আদর্শ স্ট্রিং
Parent Element <Set>
Child Elements কোনটিই নয়

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
Parent Element <Set>
Child Elements কোনটিই নয়

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
Parent Element <Set>
Child Elements কোনটিই নয়

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
Parent Element <Set>
Child Elements কোনটিই নয়

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.