আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
![]()
কী
API প্রক্সি ফ্লো চলাকালীন AssignMessage নীতি পরিবর্তন বা নতুন অনুরোধ ও উত্তর মেসেজ তৈরি করে। নীতিটি আপনাকে সেইসব মেসেজের উপর নিম্নলিখিত অ্যাকশন নিতে দেয়:
- মেসেজে নতুন ফর্ম প্যারামিটার, হেডার বা কোয়েরি প্যারামিটার যোগ করুন
- একটি মেসেজ থেকে অন্য মেসেজে আগে থেকে থাকা প্রপার্টি কপি করা
- মেসেজ থেকে হেডার, কোয়েরি প্যারামিটার, ফর্ম প্যারামিটার এবং/অথবা মেসেজ পে-লোড সরিয়ে দিন
- মেসেজে আগে থেকে থাকা প্রপার্টির ভ্যালু সেট করুন
AssignMessage নীতির মাধ্যমে, আপনি সাধারণত অনুরোধ বা উত্তরের প্রপার্টি যোগ করেন, পরিবর্তন করেন বা সরিয়ে দেন। তবে, আপনি কাস্টম অনুরোধ বা উত্তর মেসেজ তৈরি করতে এবং বিকল্প টার্গেটে পাস করতে AssignMessage নীতিও ব্যবহার করতে পারেন, যেমনটি কাস্টম অনুরোধ মেসেজ তৈরি করুন লিঙ্কে বর্ণনা করা হয়েছে।
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 | প্রয়োজন | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে |
continueOnError | মিথ্যা | ঐচ্ছিক | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে "false" এ সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ। একটি নীতি ব্যর্থ হওয়ার পরেও প্রবাহ সম্পাদন অব্যাহত রাখতে "সত্য" তে সেট করুন৷ |
enabled | সত্য | ঐচ্ছিক | নীতি প্রয়োগ করতে "সত্য" এ সেট করুন। নীতিটি "বন্ধ" করতে "মিথ্যা" এ সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না। |
async | মিথ্যা | অবচয় | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ |
নিম্নলিখিত সারণীতে
<AssignMessage>-এর চাইল্ড এলিমেন্টের একটি হাই-লেভেল বিবরণ দেওয়া হয়েছে:
| চাইল্ড এলিমেন্ট | প্রয়োজনীয়? | বিবরণ |
|---|---|---|
| সাধারণ অপারেশন | ||
<Add> |
ঐচ্ছিক |
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা মেসেজ অবজেক্টে তথ্য যোগ করে।
|
<Copy> |
ঐচ্ছিক | source
অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা মেসেজ থেকে <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা মেসেজ অবজেক্টে কপি করে। |
<Remove> |
ঐচ্ছিক |
<AssignTo> এলিমেন্টে উল্লেখ করা মেসেজ ভেরিয়েবল থেকে নির্দিষ্ট করা এলিমেন্ট মুছে দেয়। |
<Set> |
ঐচ্ছিক | অনুরোধ বা উত্তরে আগে থেকে থাকা প্রপার্টির ভ্যালু পরিবর্তন করে, যা
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা হয়।
|
| অন্যান্য চাইল্ড এলিমেন্ট | ||
<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 নীতি দ্বারা পপুলেট করা একটি ভেরিয়েবল থেকে প্রাপ্ত। তাই, এই অ্যাসাইন মেসেজ নীতি দ্বারা পরিবর্তিত উত্তর মেসেজে একটি HTTP হেডার থাকে যা নির্দেশ করে যে ফলাফলগুলি ক্যাশে থেকে নেওয়া হয়েছে কিনা। উত্তরে হেডার সেট করা ডিবাগিং এবং সমস্যার সমাধান করার জন্য কাজে লাগতে পারে।
৪: ডায়নামিক কন্টেন্ট সেট করা
আপনি উত্তর ও অনুরোধ মেসেজের পেলোডে ডায়নামিক কন্টেন্ট এম্বেড করতে Assign Message ব্যবহার করতে পারবেন।
XML পেলোডে Edge ফ্লো ভেরিয়েবল এম্বেড করতে, এই ধরনের কার্লি
ব্রেসেস দিয়ে নির্দিষ্ট ভেরিয়েবলটি র্যাপ করুন: {prefix.name}।
নিচের উদাহরণে user-agent HTTP হেডার ফ্লো ভেরিয়েবলের
মানকে User-agent নামের XML এলিমেন্টে এম্বেড করা হয়েছে:
<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 কোয়েরি প্যারামিটার সরিয়ে দেওয়া পেশাদার পদ্ধতি। আপনি এটি করেন যাতে
সংবেদনশীল কী তথ্য ব্যাকএন্ড টার্গেটে পাস না করা হয়।
৬: ভেরিয়েবেল সেট/গেট করা
নিম্নলিখিত উদাহরণে তিনটি অ্যাসাইন মেসেজ নীতি ব্যবহার করা হয়েছে:
- অনুরোধে স্ট্যাটিক মান সহ তিনটি ফ্লো ভেরিয়েবল তৈরি করে
- অনুরোধ ফ্লোতে দ্বিতীয় নীতিতে ফ্লো ভেরিয়েবল ডাইনামিক্যালি পায়
- উত্তরের পেলোডে সেগুলি সেট করে
<!-- 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> এলিমেন্ট দ্বারা নির্দিষ্ট করা ভ্যালু
ব্যবহার করতে পারবেন।
এই নীতি সেট ব্যবহার করে দেখতে:
- অনুরোধের ফ্লোতে নীতি #১ ও #২ যোগ করুন। নীতি #১, নীতি #২-এর আগে রাখতে ভুলবেন না।
- উত্তর ফ্লোতে তৃতীয় নীতি যোগ করুন।
- তৃতীয় নীতিতে উত্তরের মধ্যে ভেরিয়েবল যোগ করার জন্য
<Set>এলিমেন্ট ব্যবহার করা হয়েছে। নিচে দেওয়া উদাহরণে Edge ক্লায়েন্টকে যে উত্তর দেয় তাতে একটি 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" হিসেবে সেট করতে ভুলবেন না। - আপনার 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>
৭: পরিষেবার কলআউট সংক্রান্ত উত্তরের শীর্ষক পান
নিম্নলিখিত উদাহরণে, ধরে নিন যে API প্রক্সি অনুরোধে একটি ServiceCallout নীতি আছে,
এবং কলআউট রেসপন্সে একই নামের একাধিক হেডার আছে
(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> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<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>উদাহরণ ২
নিচের উদাহরণে <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>উদাহরণ ৩
নিচের উদাহরণে, অনুরোধে একটি কোয়েরি
প্যারামিটার যোগ করতে <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> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<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") যোগ করা হয়েছে: the request:
<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 পরিবর্তিত অনুরোধটি টার্গেট এন্ডপয়েন্টে পাঠাবে।
ফ্লো দেখতে আপনি ট্রেস টুল ব্যবহার করতে পারেন। আপনি দেখতে পাবেন যে অনুরোধের বডিতে URL-এনকোড করা ফর্ম ডেটা আছে, যা মূলত কোয়েরি স্ট্রিং প্যারামিটার হিসেবে পাস করা হয়েছে:
username=nick&zip_code=90210&default_language=en
নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <FormParams> ব্যবহার করতে পারবেন:
- HTTP ক্রিয়া: POST
- মেসেজের ধরন: অনুরোধ
- নিম্নলিখিতগুলির মধ্যে একটি (বা দুটিই):
- ফর্ম ডেটা: কোনও ভ্যালু হিসেবে সেট করা অথবা "" (খালি স্ট্রিং)। যেমন,
curl-এর সাথে, আপনার অনুরোধে-d ""যোগ করুন। Content-Lengthহেডার: ০ হিসেবে সেট করা (যদি মূল অনুরোধে কোনও ডেটা না থাকে; অন্যথায়, বর্তমান দৈর্ঘ্য, বাইটে)। যেমন, আপনার অনুরোধেcurlযোগ করুন-H "Content-Length: 0"।
- ফর্ম ডেটা: কোনও ভ্যালু হিসেবে সেট করা অথবা "" (খালি স্ট্রিং)। যেমন,
যেমন:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
আপনি <FormParams> যোগ করলে, টার্গেট পরিষেবায় মেসেজ পাঠানোর আগে Edge অনুরোধের Content-Type হেডারকে
"application/x-www-form-urlencoded" হিসেবে সেট করে।
<Headers> (<Add>-এর চাইল্ড)
নির্দিষ্ট অনুরোধ বা উত্তরে নতুন হেডার যোগ করে, যা
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা হয়।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | <Header> এলিমেন্টের অ্যারে |
| পেরেন্ট এলিমেন্ট |
<Add>
|
| চাইল্ড এলিমেন্ট |
<Header> |
<Headers> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Add>
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
</Add>
</AssignMessage>উদাহরণ ১
নিচে দেওয়া উদাহরণটি অনুরোধ মেসেজে একটি 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> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<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 নীতি কোন অবজেক্টের উপর কাজ করে তা নির্ধারণ করে। বিকল্পগুলি হল:
- অনুরোধ মেসেজ: API প্রক্সি দ্বারা প্রাপ্ত
request - উত্তর মেসেজ: টার্গেট সার্ভার থেকে পাওয়া
response - কাস্টম মেসেজ: কাস্টম অনুরোধ বা উত্তর অবজেক্ট
মনে রাখবেন, কিছু ক্ষেত্রে, আপনি সেই অবজেক্ট পরিবর্তন করতে পারবেন না যার উপর AssignMessage নীতি কাজ করে।
যেমন, আপনি <Add> বা <Set> ব্যবহার করে উত্তরের কোয়েরি প্যারামিটার
(<QueryParams>) বা ফর্ম প্যারামিটার (<FormParams>) যোগ বা পরিবর্তন করতে পারবেন না। আপনি শুধুমাত্র
অনুরোধে কোয়েরি প্যারামিটার ও ফর্ম প্যারামিটার ম্যানিপুলেট করতে পারবেন।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | স্ট্রিং |
| পেরেন্ট এলিমেন্ট |
<AssignMessage>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
আপনি <AssignTo> উল্লেখ না করলে অথবা <AssignTo> এলিমেন্ট উল্লেখ করলেও, এলিমেন্টের জন্য কোনও টেক্সট ভ্যালু উল্লেখ না করলে, নীতিটি ডিফল্ট অনুরোধ বা উত্তরের উপর কাজ করে, যা নীতিটি কোথায় এক্সিকিউট হয় তার উপর ভিত্তি করে নির্ধারিত হয়। অনুরোধ ফ্লোতে নীতি প্রয়োগ করা হলে, এটি
অনুরোধ মেসেজকে প্রভাবিত করে। এটি যদি রেসপন্স ফ্লোতে এক্সিকিউট করে, তাহলে নীতিটি ডিফল্ট হিসেবে রেসপন্সকে প্রভাবিত করে।
<AssignTo> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
উদাহরণ ১
নিম্নলিখিত উদাহরণে উল্লেখ করা হয়েছে যে টার্গেট হল মূল অনুরোধ যা টার্গেট এন্ডপয়েন্টে পাঠানো হবে:
<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">MyRequestObject</AssignTo> </AssignMessage>
আপনি নতুন অনুরোধ বা উত্তর অবজেক্ট তৈরি করলে, AssignMessage নীতির অন্যান্য এলিমেন্ট (যেমন <Add>, <Set> এবং <Copy>) সেই নতুন
অনুরোধ অবজেক্টের উপর কাজ করে।
আপনি ফ্লোয়ের পরবর্তী ধাপে অন্যান্য নীতিতে নতুন অনুরোধ অবজেক্ট অ্যাক্সেস করতে পারেন অথবা ServiceCallout নীতি সহ এক্সটার্নাল পরিষেবায় নতুন অনুরোধ অবজেক্ট পাঠাতে পারেন।
নিচের সারণীতে <AssignTo>-এর অ্যাট্রিবিউট বর্ণনা করা হয়েছে:
| অ্যাট্রিবিউট | বিবরণ | প্রয়োজনীয়? | ধরন |
|---|---|---|---|
createNew |
ভ্যালু অ্যাসাইন করার সময় এই নীতি কোনও নতুন মেসেজ তৈরি করে কিনা তা নির্ধারণ করে। "true" হলে, নীতিটি "মিথ্যা" হলে, নীতিটি দুটি উপায়ের মধ্যে একটিতে উত্তর দেয়:
|
ঐচ্ছিক | বুলিয়ান |
transport |
অনুরোধ বা উত্তর মেসেজ ধরনের জন্য ট্রান্সপোর্ট ধরন নির্দিষ্ট করে। ডিফল্ট ভ্যালু হল "http" (এটিই একমাত্র কাজ করে)। |
ঐচ্ছিক | স্ট্রিং |
type |
createNew-এর মান "true" হলে, নতুন মেসেজের ধরন নির্দিষ্ট করে। সঠিক
ভ্যালু হল "অনুরোধ" বা "উত্তর"।
আপনি এই অ্যাট্রিবিউট বাদ দিলে, ফ্লোয়ের কোন অংশে এই নীতি এক্সিকিউট হচ্ছে তার উপর নির্ভর করে Edge একটি অনুরোধ বা উত্তর তৈরি করে। |
ঐচ্ছিক | স্ট্রিং |
<AssignVariable>
ফ্লো ভেরিয়েবেলে মান অ্যাসাইন করে। ফ্লো ভেরিয়েবল না থাকলে, তাহলে
<AssignVariable> এটি তৈরি করে।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | জটিল ধরন |
| পেরেন্ট এলিমেন্ট |
<AssignMessage>
|
| চাইল্ড এলিমেন্ট |
<Name> (প্রয়োজনীয়)<Ref><Template><Value> |
ফ্লো ভেরিয়েবলে আপনি যে ভ্যালু অ্যাসাইন করেন তা নিম্নলিখিতগুলির মধ্যে একটি হতে পারে:
- আক্ষরিক স্ট্রিং: ফ্লো ভেরিয়েবলের জন্য আক্ষরিক
স্ট্রিং ভ্যালু নির্দিষ্ট করতে
<Value>চাইল্ড এলিমেন্ট ব্যবহার করুন। - ফ্লো ভেরিয়েবল: গন্তব্য ফ্লো ভেরিয়েবলের জন্য আগে থেকে থাকা ফ্লো ভেরিয়েবলের ভ্যালু নির্দিষ্ট করতে,
<Ref>চাইল্ড এলিমেন্ট ব্যবহার করুন। সোর্স হিসেবে ব্যবহার করা যায় এমন ফ্লো ভেরিয়েবলের সম্পূর্ণ তালিকা দেখতে, ফ্লো ভেরিয়েবল রেফারেন্স দেখুন। - মেসেজ টেমপ্লেট: ইন্টারপোলেট করার জন্য
<Template>চাইল্ড এলিমেন্ট ব্যবহার করে মেসেজ টেমপ্লেট নির্দিষ্ট করুন। এর ফলে ডেস্টিনেশন ফ্লো ভেরিয়েবলে প্লেস করার জন্য ভ্যালু পাওয়া যাবে।
<AssignVariable> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
সোর্স ভেরিয়েবল নির্দিষ্ট করতে <Ref> এলিমেন্ট ব্যবহার করুন। <Ref>-এর রেফারেন্স করা
ভেরিয়েবেল অ্যাক্সেস করা না গেলে, Edge <Value> এলিমেন্টের নির্দিষ্ট করা ভ্যালু
ব্যবহার করে। আপনি যদি
<Template> নির্ধারণ করেন, তাহলে এটি অন্যান্য চাইল্ড এলিমেন্টের চেয়ে বেশি অগ্রাধিকার পাবে।
উদাহরণ ১
নিম্নলিখিত উদাহরণে, একটি নতুন ভেরিয়েবল, myvar-এর ভ্যালু, লিটারাল
ভ্যালু "৪২" হিসেবে সেট করা হয়েছে:
<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> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
উদাহরণ ১
নিচে দেওয়া উদাহরণে গন্তব্য ভেরিয়েবলকে myvar হিসেবে নির্দিষ্ট করা হয়েছে এবং এটিকে "৪২" লিটারেল ভ্যালুতে সেট করা হয়েছে:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
myvar না থাকলে, <AssignVariable> এটি তৈরি করে।
<Ref> (<AssignVariable>-এর চাইল্ড)
ফ্লো ভেরিয়েবল হিসেবে অ্যাসাইনমেন্টের সোর্স নির্দিষ্ট করে। ফ্লো ভেরিয়েবল আগে থেকে সংজ্ঞায়িত ফ্লো ভেরিয়েবলগুলির মধ্যে একটি হতে পারে (ফ্লো ভেরিয়েবল রেফারেন্স-এ তালিকাভুক্ত) অথবা আপনার তৈরি করা কাস্টম ফ্লো ভেরিয়েবল হতে পারে।
<Ref>-এর ভ্যালুকে সবসময় ফ্লো ভেরিয়েবেল হিসেবে ব্যাখ্যা করা হয়; আপনি
ভ্যালু হিসেবে কোনও লিটেরাল স্ট্রিং
নির্দিষ্ট করতে পারবেন না। লিটারেল স্ট্রিং ভ্যালু অ্যাসাইন করতে, <Value> এলিমেন্ট
ব্যবহার করুন।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | স্ট্রিং |
| পেরেন্ট এলিমেন্ট |
<AssignVariable>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<Ref> দিয়ে কোনও ফ্লো ভেরিয়েবল নির্দিষ্ট করলে, ফ্লো ভেরিয়েবল রেফারেন্স করার জন্য সাধারণত যে "{}" এনক্লোজিং ব্র্যাকেট ব্যবহার করেন সেটি বাদ দিন। যেমন,
client.host ফ্লো
ভেরিয়েবলের মান আপনার নতুন ভেরিয়েবলে সেট করতে:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
ডেস্টিনেশন ফ্লো ভেরিয়েবলের জন্য ডিফল্ট ভ্যালু নির্ধারণ করতে, <Ref>-এর সাথে <Value>
ব্যবহার করুন।
<Ref>-এর মাধ্যমে নির্দিষ্ট করা ফ্লো ভেরিয়েবেল না থাকলে, সেটি পড়া না গেলে বা তার মান শূন্য হলে, Edge তার পরিবর্তে ডেস্টিনেশন ফ্লো ভেরিয়েবেলে
<Value>-এর মান অ্যাসাইন করে।
<Ref> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিন্ট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> </AssignVariable> </AssignMessage>
উদাহরণ ১
নিচে দেওয়া উদাহরণে ফ্লো ভেরিয়েবলের ভ্যালু
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 কোয়েরি প্যারামিটারের ভ্যালু শূন্য, অপাঠ্য বা ভুল ফর্ম্যাটে থাকলে, Edge নতুন ভেরিয়েবলকে "ErrorOnCopy" ভ্যালু অ্যাসাইন করে।
উদাহরণ ৩
<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
-এর ভ্যালু পায় এবং সেটি নিজের জন্য অ্যাসাইন করে। ফ্লো ভেরিয়েবল নাল হলে, অর্থাৎ "w" কোয়েরি প্যারামিটারটি অনুরোধ থেকে
বাদ দেওয়া হলে, এই উদাহরণটি <Value> এলিমেন্ট থেকে
ডিফল্ট ভ্যালু ব্যবহার করে। তাই, আপনি এই API
প্রক্সি সার্ভারে অনুরোধ করতে পারেন যা "w" কোয়েরি প্যারামিটার বাদ দেয়:
http://myCO.com/v1/weather/forecastrss
...এবং API প্রক্সি থেকে এখনও সঠিক ফলাফল পাওয়া যায়।
<Value> ব্যবহার করার সময় যা হয় তার বিপরীতে, <Ref>-এর ভ্যালু অবশ্যই একটি
ফ্লো ভেরিয়েবল হতে হবে, যেমন request, response বা
target অবজেক্টের প্রপার্টি। এছাড়াও, ভ্যালু এমন কাস্টম ফ্লো ভেরিয়েবল হতে পারে যা আপনি তৈরি করেছেন।
<Ref>-এর জন্য এমন ফ্লো ভেরিয়েবল নির্দিষ্ট করলে যা নেই,
এবং <IgnoreUnresolvedVariables>-এর ভ্যালু "true" হলে, Edge একটি সমস্যা দেখায়।
<Template> (<AssignVariable>-এর চাইল্ড)
একটি মেসেজ টেমপ্লেট নির্দিষ্ট করে। নীতি কার্যকর করার সময় মেসেজ টেমপ্লেট আপনাকে ভেরিয়েবল স্ট্রিং সাবস্টিটিউশন পারফর্ম করতে দেয় এবং কার্লি ব্রেসেস দিয়ে মোড়ানো ভেরিয়েবল নামের সাথে লিটেরাল স্ট্রিং একত্রিত করতে পারে। এছাড়াও, মেসেজ টেমপ্লেট ফাংশন যেমন এস্কেপিং ও কেস কনভার্সন সাপোর্ট করে।
ফ্লো ভেরিয়েবল নির্দিষ্ট করতে ref অ্যাট্রিবিউট ব্যবহার করুন, যেখানে ভেরিয়েবলের ভ্যালু
হল মেসেজ টেমপ্লেট। যেমন, আপনি কোনও
কাস্টম অ্যাট্রিবিউট
হিসেবে কোনও ডেভেলপার অ্যাপে মেসেজ টেমপ্লেট স্টোর করতে পারেন। Edge যখন API কী
বা নিরাপত্তা টোকেন (অতিরিক্ত নীতির মাধ্যমে) যাচাই করার পরে ডেভেলপার অ্যাপ শনাক্ত করে, তখন <AssignVariable>
এলিমেন্ট অ্যাপের কাস্টম অ্যাট্রিবিউট থেকে মেসেজ টেমপ্লেট ব্যবহার করতে পারে, যা নিরাপত্তা নীতি থেকে ফ্লো ভেরিয়েবল হিসেবে
উপলভ্য।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | স্ট্রিং |
| পেরেন্ট এলিমেন্ট |
<AssignVariable>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<Template> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Template>message_template</Template> or <Template ref='template_variable'></Template> </AssignVariable> </AssignMessage>
উদাহরণ ১
নিচের উদাহরণে দুটি প্রসঙ্গ ভেরিয়েবলকে একটি আক্ষরিক স্ট্রিং (হাইফেন) দিয়ে যুক্ত করতে মেসেজ টেমপ্লেটিং সিনট্যাক্স ব্যবহার করা হয়েছে:
<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>
উদাহরণ ৩
নিচের উদাহরণে একটি ফ্লো ভেরিয়েবল ও টেক্সট ভ্যালু নির্দিষ্ট করা হয়েছে। এই ক্ষেত্রে, যদি
রেফার করা ভেরিয়েবলটি নন-নাল হয়, তাহলে সেই ভ্যালুটি টেমপ্লেট হিসেবে ব্যবহার করা হয়। রেফার করা
ভ্যালু শূন্য হলে, টেক্সট ভ্যালু (এই ক্ষেত্রে, {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> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
নমুনা ১
নিম্নলিখিত উদাহরণে, ডেস্টিনেশন ফ্লো ভেরিয়েবল, myvar-এর ভ্যালু,
"৪২" লিটেরাল ভ্যালু হিসেবে সেট করা হয়েছে:
<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> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<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> এলিমেন্টে একটি অ্যাট্রিবিউট আছে:
| অ্যাট্রিবিউট | বিবরণ | প্রয়োজনীয়? | ধরন |
|---|---|---|---|
| সোর্স |
কপির সোর্স অবজেক্ট নির্দিষ্ট করে।
|
ঐচ্ছিক | স্ট্রিং |
<FormParams> (<Copy>-এর চাইল্ড)
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা অনুরোধে
<Copy> এলিমেন্টের source অ্যাট্রিবিউট থেকে অনুরোধের
ফর্ম প্যারামিটার কপি করে। এই এলিমেন্টটি উত্তরের উপর কোনও প্রভাব ফেলে না
।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | <FormParam> এলিমেন্টের অ্যারে বা খালি অ্যারে |
| পেরেন্ট এলিমেন্ট |
<Copy>
|
| চাইল্ড এলিমেন্ট |
<FormParam> |
<FormParams> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Copy> </AssignMessage>
উদাহরণ ১
নিচে দেওয়া উদাহরণটি অনুরোধ থেকে একটি ফর্ম প্যারামিটার কপি করে কাস্টম অনুরোধ "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 ক্রিয়া: POST
- মেসেজের ধরন: উত্তর
- নিম্নলিখিতগুলির মধ্যে একটি (বা দুটিই):
- ফর্ম ডেটা: কোনও ভ্যালু হিসেবে সেট করা অথবা "" (খালি স্ট্রিং)। যেমন,
curl-এর সাথে, আপনার অনুরোধে-d ""যোগ করুন। Content-Lengthহেডার: ০ হিসেবে সেট করা হয় (যদি মূল অনুরোধে কোনও ডেটা না থাকে ; অন্যথায়, বর্তমান দৈর্ঘ্য। যেমন, আপনার অনুরোধেcurlযোগ করুন-H "Content-Length: 0"।
- ফর্ম ডেটা: কোনও ভ্যালু হিসেবে সেট করা অথবা "" (খালি স্ট্রিং)। যেমন,
আপনি <FormParams> কপি করলে, টার্গেট পরিষেবায় মেসেজ পাঠানোর আগে <Copy> মেসেজের Content-Type-কে
"application/x-www-form-urlencoded" হিসেবে সেট করে।
<Headers> (<Copy>-এর চাইল্ড)
<Copy> এলিমেন্টের source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা অনুরোধ বা উত্তর মেসেজ থেকে HTTP হেডার কপি করে
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা অনুরোধ বা উত্তর মেসেজে পেস্ট করে।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | <Header> এলিমেন্টের একটি অ্যারে বা খালি অ্যারে |
| পেরেন্ট এলিমেন্ট |
<Copy>
|
| চাইল্ড এলিমেন্ট |
<Header> |
<Headers> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Copy> </AssignMessage>
উদাহরণ ১
নিম্নলিখিত উদাহরণটি অনুরোধ থেকে 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>
উদাহরণ ২
সব হেডার কপি করতে, একটি খালি <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> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<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> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<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> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<ReasonPhrase>[false|true]</ReasonPhrase>
</Copy>
</AssignMessage>উদাহরণ ১
নিচে দেওয়া উদাহরণে <ReasonPhrase>-এর মান true হিসেবে সেট করা হয়েছে। সোর্স ও
<AssignTo> এলিমেন্ট নির্দিষ্ট করা থাকলে, এর ফলে <Copy>
নাম করা রেসপন্স মেসেজ থেকে কারণ সংক্রান্ত বাক্যাংশ response অবজেক্টে কপি করে:
<AssignMessage name="AM-copy-reasonphrase-1">
<Copy source="serviceCalloutResponse">
<ReasonPhrase>true</ReasonPhrase>
</Copy>
<AssignTo>response</AssignTo>
</AssignMessage>সোর্স ও ডেস্টিনেশন মেসেজ 'উত্তর' ধরনের হলে তবেই আপনি <ReasonPhrase> ব্যবহার করতে পারবেন।
<StatusCode> (<Copy>-এর চাইল্ড)
সোর্স রেসপন্স থেকে ডেস্টিনেশন রেসপন্সে স্ট্যাটাস কোড কপি করা হয়েছে কিনা তা নির্ধারণ করে। অনুরোধের উপর এই এলিমেন্টের কোনও প্রভাব পড়ে না।
"true" হলে, এই নীতিটি থেকে স্ট্যাটাস কোড কপি করে
<Copy> এলিমেন্টের source অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা উত্তর থেকে উত্তরে
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা মেসেজে পেস্ট করে।
| ডিফল্ট ভ্যালু | মিথ্যা |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | বুলিয়ান |
| পেরেন্ট এলিমেন্ট |
<Copy>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<StatusCode> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<StatusCode>[false|true]</StatusCode>
</Copy>
</AssignMessage>উদাহরণ ১
নিচের উদাহরণটি <StatusCode>-কে "true" হিসেবে সেট করে, যা ডিফল্ট রেসপন্স অবজেক্ট থেকে স্ট্যাটাস কোড
কপি করে নতুন কাস্টম রেসপন্স অবজেক্টে পেস্ট করে:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
সোর্স ও ডেস্টিনেশন মেসেজ 'উত্তর' ধরনের হলে তবেই আপনি <StatusCode> ব্যবহার করতে পারবেন।
<StatusCode>-এর একটি সাধারণ ব্যবহার হল, প্রক্সি রেসপন্স স্ট্যাটাস কোডকে
টার্গেট থেকে প্রাপ্ত ভ্যালু থেকে আলাদা ভ্যালুতে সেট করা।
<Verb> (<Copy>-এর চাইল্ড)
HTTP ক্রিয়া সোর্স অনুরোধ থেকে ডেস্টিনেশন অনুরোধে কপি করা হয়েছে কিনা তা নির্ধারণ করে। উত্তরের উপর এই এলিমেন্টের কোনও প্রভাব পড়ে না।
"true" হলে, <AssignTo> এলিমেন্টে উল্লেখ করা অনুরোধে <Copy> এলিমেন্টের source অ্যাট্রিবিউটে
পাওয়া ক্রিয়াটি কপি করে।
| ডিফল্ট ভ্যালু | মিথ্যা |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | বুলিয়ান |
| পেরেন্ট এলিমেন্ট |
<Copy>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<Verb> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<Verb>[false|true]</Verb>
</Copy>
</AssignMessage>উদাহরণ ১
নিচে দেওয়া উদাহরণটি <Verb>-কে "true" হিসেবে সেট করে, যা ডিফল্ট অনুরোধ থেকে
নতুন, কাস্টম অনুরোধে ভার্ব কপি করে:
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <Verb> ব্যবহার করতে পারবেন:
- মেসেজের ধরন: অনুরোধ
<Version> (<Copy>-এর চাইল্ড)
HTTP ভার্সন সোর্স অনুরোধ থেকে কপি করে গন্তব্য সংক্রান্ত অনুরোধে পেস্ট করা হবে কিনা তা নির্ধারণ করে। উত্তরের উপর এই এলিমেন্টের কোনও প্রভাব পড়ে না।
"true" হলে, <Copy> এলিমেন্টের source অ্যাট্রিবিউটে
পাওয়া HTTP ভার্সনটি <AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা অবজেক্টে কপি করে।
| ডিফল্ট ভ্যালু | মিথ্যা |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | বুলিয়ান |
| পেরেন্ট এলিমেন্ট |
<Copy>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<Version> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<Version>[false|true]</Version>
</Copy>
</AssignMessage>উদাহরণ ১
নিম্নলিখিত উদাহরণে অনুরোধে <Version>-এর মান "true" সেট করা হয়েছে, যা ডিফল্ট অনুরোধ অবজেক্ট থেকে
নতুন, কাস্টম অনুরোধ অবজেক্টে ভার্সন কপি করে:
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <Version> ব্যবহার করতে পারবেন:
- মেসেজের ধরন: অনুরোধ
<DisplayName>
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিকে
অন্য, আরও স্বাভাবিক-শুনতে-লাগা নাম দিয়ে লেবেল করতে name অ্যাট্রিবিউট ছাড়াও এটি ব্যবহার করুন।
<DisplayName> এলিমেন্টটি সব নীতির ক্ষেত্রেই সাধারণ।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক। আপনি <DisplayName> বাদ দিলে, নীতির name অ্যাট্রিবিউটের ভ্যালু ব্যবহার করা হয়
|
| টাইপ করুন | স্ট্রিং |
| পেরেন্ট এলিমেন্ট | <PolicyElement> |
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<DisplayName> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিন্ট্যাক্স
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
উদাহরণ
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
<DisplayName> এলিমেন্টে কোনও অ্যাট্রিবিউট বা চাইল্ড এলিমেন্ট নেই।
<IgnoreUnresolvedVariables>
কোনও সমাধান না হওয়া ভেরিয়েবল পাওয়া গেলে প্রসেসিং বন্ধ হয়ে যাবে কিনা তা নির্ধারণ করে।
| ডিফল্ট ভ্যালু | মিথ্যা |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | বুলিয়ান |
| পেরেন্ট এলিমেন্ট |
<AssignMessage>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
true-এ সেট করা থাকলে, সমাধান না হওয়া ভেরিয়েবল উপেক্ষা করে প্রসেসিং চালিয়ে যাবে; অন্যথায়
false। ডিফল্ট ভ্যালু হল false।
<IgnoreUnresolvedVariables>-কে true হিসেবে সেট করা
<AssignMessage>-এর continueOnError-কে true হিসেবে সেট করার থেকে আলাদা, কারণ এটি
ভেরিয়েবলের ভ্যালু সেট করা ও পাওয়ার ক্ষেত্রে নির্দিষ্ট। আপনি continueOnError-এর মান
true সেট করলে, Edge সব সমস্যা উপেক্ষা করে, শুধু
ভেরিয়েবল ব্যবহার করার সময় হওয়া সমস্যা নয়।
<IgnoreUnresolvedVariables> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<IgnoreUnresolvedVariables>[true|false]
</IgnoreUnresolvedVariables>
</AssignMessage>উদাহরণ ১
নিচের উদাহরণে <IgnoreUnresolvedVariables>-কে "ট্রু" হিসেবে সেট করা হয়েছে:
<AssignMessage name="AM-Set-Headers"> <Set> <Headers> <Header name='new-header'>{possibly-defined-variable}<Header> </Headers> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> </AssignMessage>
<IgnoreUnresolvedVariables>-এর মান true হিসেবে সেট করা আছে বলে, যদি
possibly-defined-variable ভেরিয়েবল নির্দিষ্ট করা না থাকে, তাহলে এই নীতি
কোনও ফল্ট দেখাবে না।
<Remove>
কোনও মেসেজ থেকে হেডার, কোয়েরি প্যারামিটার, ফর্ম প্যারামিটার এবং/অথবা মেসেজ পেলোড সরিয়ে দেয়।
মেসেজটি অনুরোধ বা উত্তর হতে পারে। <AssignTo> এলিমেন্ট ব্যবহার করে আপনি নির্দিষ্ট করেন যে কোন মেসেজ <Remove>
অনুযায়ী কাজ করতে হবে।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | জটিল ধরন |
| পেরেন্ট এলিমেন্ট |
<AssignMessage>
|
| চাইল্ড এলিমেন্ট |
<FormParams><Headers><Payload><QueryParams> |
<Remove>-এর একটি সাধারণ ব্যবহার হল, ইনকামিং অনুরোধ অবজেক্ট থেকে সংবেদনশীল তথ্য থাকা কোয়েরি প্যারামিটার বা হেডার মুছে ফেলা, যাতে এটি ব্যাকএন্ড সার্ভারে পাস না করা যায়।
<Remove> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<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>
উদাহরণ ১
নিম্নলিখিত উদাহরণটি উত্তরের মধ্যে থেকে মেসেজের মূল অংশটি সরিয়ে দেয়:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
উত্তর ফ্লোতে, এই নীতি উত্তরের বডি সরিয়ে দেয় এবং ক্লায়েন্টকে শুধুমাত্র HTTP হেডার রিটার্ন করে।
উদাহরণ ২
নিচে দেওয়া উদাহরণটি request অবজেক্ট থেকে
সব ফর্ম প্যারামিটার ও কোয়েরি প্যারামিটার সরিয়ে দেয়:
<AssignMessage name="AM-remove-2">
<Remove>
<!-- Empty (<FormParams/>) removes all form parameters -->
<FormParams/>
<QueryParams>
<QueryParam name="qp1"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>উদাহরণ ৩
নিচে দেওয়া উদাহরণে মেসেজ অবজেক্ট থেকে সবকিছু সরিয়ে দেওয়া হয়েছে:
<AssignMessage name="AM-remove-3"> <Remove/> <AssignTo>request</AssignTo> </AssignMessage>
সাধারণত, আপনি এটি তখনই করবেন যখন মেসেজে কিছু রিপ্লেসমেন্ট ভ্যালু সেট করার জন্য <Set> এলিমেন্ট বা
<Copy> এলিমেন্ট ব্যবহার করতে চলেছেন।
<FormParams> (<Remove>-এর চাইল্ড)
অনুরোধ থেকে নির্দিষ্ট ফর্ম প্যারামিটার সরিয়ে দেয়। এই এলিমেন্টটি উত্তরের উপর কোনও প্রভাব ফেলে না ।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | <FormParam> এলিমেন্টের অ্যারে বা খালি অ্যারে |
| পেরেন্ট এলিমেন্ট |
<Remove>
|
| চাইল্ড এলিমেন্ট |
<FormParam> |
<FormParams> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Remove> </AssignMessage>
উদাহরণ ১
নিচের উদাহরণে অনুরোধ থেকে তিনটি ফর্ম প্যারামিটার সরিয়ে দেওয়া হয়েছে:
<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>উদাহরণ ২
নিম্নলিখিত উদাহরণে অনুরোধ থেকে সব ফর্ম প্যারামিটার সরিয়ে দেওয়া হয়েছে:
<AssignMessage name="AM-remove-formparams-2">
<Remove>
<FormParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>উদাহরণ ৩
একই নামের একাধিক ফর্ম প্যারামিটার থাকলে, নিম্নলিখিত সিনট্যাক্স ব্যবহার করুন:
<AssignMessage name="AM-remove-formparams-3">
<Remove>
<FormParams>
<FormParam name="f1"/>
<FormParam name="f2"/>
<FormParam name="f3.2"/>
</FormParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>এই উদাহরণে "f1", "f2" এবং "f3"-এর দ্বিতীয় ভ্যালু সরিয়ে দেওয়া হয়েছে। "f3"-এর যদি শুধুমাত্র একটি মান থাকে, তাহলে এটি সরানো হয় না।
নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <FormParams> ব্যবহার করতে পারবেন:
- মেসেজের ধরন: অনুরোধ
Content-Type: "application/x-www-form-urlencoded"
<Headers> (<Remove>-এর চাইল্ড)
অনুরোধ বা উত্তর থেকে নির্দিষ্ট HTTP হেডার সরিয়ে দেয়, যা
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা হয়।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | <Header> এলিমেন্টের অ্যারে বা খালি অ্যারে |
| পেরেন্ট এলিমেন্ট |
<Remove>
|
| চাইল্ড এলিমেন্ট |
<Header> |
<Headers> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিন্ট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Remove> </AssignMessage>
উদাহরণ ১
নিচের উদাহরণে অনুরোধ থেকে user-agent হেডার সরিয়ে দেওয়া হয়েছে:
<AssignMessage name="AM-remove-one-header">
<Remove>
<Headers>
<Header name="user-agent"/>
</Headers>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>উদাহরণ ২
নিম্নলিখিত উদাহরণটি অনুরোধ থেকে সমস্ত হেডার সরিয়ে দেয়:
<AssignMessage name="AM-remove-all-headers">
<Remove>
<Headers/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>উদাহরণ ৩
একই নামের একাধিক হেডার থাকলে, নিম্নলিখিত সিনট্যাক্স ব্যবহার করুন:
<AssignMessage name="AM-remove-headers-3">
<Remove>
<Headers>
<Header name="h1"/>
<Header name="h2"/>
<Header name="h3.2"/>
</Headers>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>এই উদাহরণে, অনুরোধ থেকে "h1", "h2" এবং "h3"-এর দ্বিতীয় ভ্যালু সরিয়ে দেওয়া হয়েছে। "h3" -এর শুধুমাত্র একটি ভ্যালু থাকলে, সেটি সরানো হয় না।
<Payload> (<Remove>-এর চাইল্ড)
<Remove> অনুরোধ বা উত্তরে পে-লোড মুছে দেয় কিনা তা নির্ধারণ করে, যা <AssignTo> এলিমেন্ট দ্বারা
নির্দিষ্ট করা হয়। পে-লোড সরাতে "true" হিসেবে সেট করুন; অন্যথায় "false" হিসেবে সেট করুন। ডিফল্ট ভ্যালু হল "false"।
| ডিফল্ট ভ্যালু | মিথ্যা |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | বুলিয়ান |
| পেরেন্ট এলিমেন্ট |
<Remove>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<Payload> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিন্ট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
উদাহরণ ১
নিচের উদাহরণে <Payload>-কে "ট্রু" হিসেবে সেট করা হয়েছে, যাতে অনুরোধের পেলোড
পরিষ্কার করা যায়:
<AssignMessage name="AM-remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams> (<Remove>-এর চাইল্ড)
অনুরোধ থেকে নির্দিষ্ট কোয়েরি প্যারামিটার সরিয়ে দেয়। এই এলিমেন্টটি উত্তরের উপর কোনও প্রভাব ফেলে না ।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | <QueryParam> এলিমেন্টের অ্যারে বা খালি অ্যারে |
| পেরেন্ট এলিমেন্ট |
<Remove>
|
| চাইল্ড এলিমেন্ট |
<QueryParam> |
<QueryParams> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
উদাহরণ ১
নিম্নলিখিত উদাহরণে অনুরোধ থেকে একটি কোয়েরি প্যারামিটার সরানো হয়েছে:
<AssignMessage name="AM-remove-queryparams-1">
<Remove>
<QueryParams>
<QueryParam name="qp1"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>উদাহরণ ২
নিম্নলিখিত উদাহরণে অনুরোধ থেকে সব কোয়েরি প্যারামিটার সরিয়ে দেওয়া হয়েছে:
<AssignMessage name="AM-remove-queryparams-2">
<Remove>
<QueryParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>উদাহরণ ৩
একই নামের একাধিক কোয়েরি প্যারামিটার থাকলে, নিম্নলিখিত সিনট্যাক্স ব্যবহার করুন:
<AssignMessage name="AM-remove-queryparams-3">
<Remove>
<QueryParams>
<QueryParam name="qp1"/>
<QueryParam name="qp2"/>
<QueryParam name="qp3.2"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>এই উদাহরণে, অনুরোধ থেকে "qp1", "qp2" এবং "qp3"-এর দ্বিতীয় ভ্যালু সরিয়ে দেওয়া হয়েছে। যদি "qp3"-এর শুধুমাত্র একটি ভ্যালু থাকে, তাহলে এটি সরানো হয় না।
উদাহরণ ৪
নিচে দেওয়া উদাহরণে অনুরোধ থেকে apikey কোয়েরি প্যারামিটার সরিয়ে দেওয়া হয়েছে:
<AssignMessage name="AM-remove-query-param">
<Remove>
<QueryParams>
<QueryParam name="apikey"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <QueryParams> ব্যবহার করতে পারবেন:
- HTTP ক্রিয়া: GET
- মেসেজের ধরন: অনুরোধ
<Set>
অনুরোধ বা উত্তর মেসেজে তথ্য সেট করে, যা
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা হয়। <Set> হেডার বা
কোয়েরি বা ফর্ম প্যারামিটার ওভাররাইট করে যা মূল মেসেজে আগে থেকেই আছে। HTTP মেসেজে হেডার, কোয়েরি ও ফর্ম প্যারামিটার
একাধিক ভ্যালু থাকতে পারে। কোনও হেডার বা প্যারামিটারের জন্য অতিরিক্ত ভ্যালু যোগ করতে, এর পরিবর্তে
<Add> এলিমেন্ট ব্যবহার করুন।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | জটিল ধরন |
| পেরেন্ট এলিমেন্ট |
<AssignMessage>
|
| চাইল্ড এলিমেন্ট |
<FormParams><Headers><Payload><Path><QueryParams><ReasonPhrase><StatusCode><Verb><Version> |
<Set> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিন্ট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
উদাহরণ ১
নিচের উদাহরণে একটি নির্দিষ্ট হেডার সেট করা হয়েছে। অনুরোধ ফ্লোতে এই নীতি যোগ করা হলে, আপস্ট্রিম সিস্টেমকে একটি অতিরিক্ত হেডার গ্রহণ করার অনুমতি দেওয়া হবে যা আসল ইনবাউন্ড অনুরোধে অন্তর্ভুক্ত ছিল না।
<AssignMessage name="AM-Set-Header">
<Set>
<Headers>
<Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
</Headers>
</Set>
<AssignTo>request</AssignTo>
</AssignMessage>উদাহরণ ২
নিম্নলিখিত উদাহরণে, উত্তরের পেলোড এবং Content-Type হেডার ওভাররাইট করা হয়েছে।
<AssignMessage name="AM-Overwrite-Payload"> <Set> <Payload contentType="application/json">{ "status" : 42 }</Payload> </Set> <AssignTo>response</AssignTo> </AssignMessage>
<FormParams> (<Set>-এর চাইল্ড)
অনুরোধে আগে থেকে থাকা ফর্ম প্যারামিটার ওভাররাইট করে এবং এই এলিমেন্টের সাথে আপনার উল্লেখ করা নতুন ভ্যালু দিয়ে সেগুলি পরিবর্তন করে। উত্তরের উপর এই এলিমেন্টের কোনও প্রভাব পড়ে না।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | <FormParam> এলিমেন্টের অ্যারে |
| পেরেন্ট এলিমেন্ট |
<Set>
|
| চাইল্ড এলিমেন্ট |
<FormParam> |
<FormParams> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Set>
<FormParams>
<FormParam name="formparam_name">formparam_value</FormParam>
...
</FormParams>
</Set>
</AssignMessage>উদাহরণ ১
নিম্নলিখিত উদাহরণে, নতুন কাস্টম অনুরোধে "myparam" নামের একটি ফর্ম প্যারামিটারকে
request.header.myparam ভেরিয়েবলের ভ্যালু হিসেবে সেট করা হয়েছে:
<AssignMessage name="AM-set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <FormParams> ব্যবহার করতে পারবেন:
- HTTP ক্রিয়া: POST
- মেসেজের ধরন: অনুরোধ
আপনি যদি নিজের নীতিতে খালি ফর্ম প্যারামিটার
(<Add><FormParams/></Add>) নির্ধারণ করেন, তাহলে নীতি কোনও ফর্ম
প্যারামিটার যোগ করে না। এটি <FormParams> বাদ দেওয়ার মতোই।
টার্গেট এন্ডপয়েন্টে পাঠানোর আগে <Set> মেসেজের Content-Type পরিবর্তন করে
"application/x-www-form-urlencoded" করে দেয়।
<Headers> (<Set>-এর চাইল্ড)
অনুরোধ বা উত্তরে আগে থেকে থাকা HTTP হেডার ওভাররাইট করে, যা
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা হয়।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | <Header> এলিমেন্টের অ্যারে |
| পেরেন্ট এলিমেন্ট |
<Set>
|
| চাইল্ড এলিমেন্ট |
<Header> |
<Headers> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Set>
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
</Set>
</AssignMessage>উদাহরণ ১
নিচে দেওয়া উদাহরণটি x-ratelimit-remaining হেডারকে
ratelimit.Quota-1.available.count ভেরিয়েবলের ভ্যালু হিসেবে সেট করে:
<AssignMessage name="AM-Set-RateLimit-Header">
<Set>
<Headers>
<Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
</Headers>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>আপনি যদি নিজের নীতিতে খালি হেডার নির্ধারণ করেন
(<Set><Headers/></Set>), তাহলে নীতি কোনও হেডার সেট করে না। এর
ফলে <Headers> বাদ দেওয়ার মতোই প্রভাব পড়বে।
<Path> (<Set>-এর চাইল্ড)
<Payload> (<Set>-এর চাইল্ড)
অনুরোধ বা উত্তরের জন্য মেসেজ বডিকে সংজ্ঞায়িত করে, যা
<AssignTo> এলিমেন্ট দ্বারা নির্দিষ্ট করা হয়। পেলোড যেকোনও সঠিক কন্টেন্টের ধরন হতে পারে, যেমন সাধারণ
টেক্সট, JSON বা XML.
| ডিফল্ট ভ্যালু | খালি স্ট্রিং |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | স্ট্রিং |
| পেরেন্ট এলিমেন্ট |
<Set>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<Payload> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> </Set> </AssignMessage>
উদাহরণ ১
নিচের উদাহরণে প্লেন টেক্সট পেলোড সেট করা হয়েছে:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
উদাহরণ ২
নিচের উদাহরণে JSON পেলোড সেট করা হয়েছে:
<AssignMessage name="set-payload-2"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set> </AssignMessage>
উদাহরণ ৩
নিচে দেওয়া উদাহরণে, ভেরিয়েবলের নাম কার্লি ব্রেসেসে লিখে পেলোডে ভেরিয়েবলের ভ্যালু যোগ করা হয়েছে:
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
Apigee-এর আগের ভার্সনে, আপনি JSON পেলোডের মধ্যে ভেরিয়েবল রেফারেন্স বোঝাতে
কার্লি ব্রেসেস ব্যবহার করতে পারতেন না। সেইসব রিলিজের ক্ষেত্রে, আপনাকে
ডিলিমিটার অক্ষর নির্দিষ্ট করতে variablePrefix এবং variableSuffix অ্যাট্রিবিউট ব্যবহার করতে
হতো এবং ভেরিয়েবল নাম র্যাপ করতে সেগুলি ব্যবহার করতে হতো, যেমন:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
এই পুরনো সিনট্যাক্স এখনও কাজ করে।
উদাহরণ ৪
<Payload>-এর কন্টেন্টকে মেসেজ টেমপ্লেট হিসেবে বিবেচনা করা হয়। এর অর্থ হল, রানটাইমে
রেফার করা ভেরিয়েবলের ভ্যালু দিয়ে
AssignMessage নীতি কার্লি ব্রেসে মোড়ানো ভেরিয়েবলকে পরিবর্তন করে দেয়।
নিম্নলিখিত উদাহরণে, কার্লি ব্রেসেস সিনট্যাক্স ব্যবহার করে পে-লোডের অংশকে ভেরিয়েবল ভ্যালু হিসেবে সেট করা হয়েছে:
<AssignMessage name="set-payload-4"> <Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </root> </Payload> </Set> </AssignMessage>
নিচের সারণীতে <Payload>-এর অ্যাট্রিবিউট বর্ণনা করা হয়েছে:
| অ্যাট্রিবিউট | বিবরণ | উপস্থিতি | ধরন |
|---|---|---|---|
contentType |
উল্লেখ করা থাকলে, |
ঐচ্ছিক | স্ট্রিং |
variablePrefix |
ফ্লো ভেরিয়েবেলে ঐচ্ছিকভাবে লিডিং ডিলিমিটার নির্দিষ্ট করে। ডিফল্ট হিসেবে "{" থাকে। আরও তথ্যের জন্য, ফ্লো ভেরিয়েবল রেফারেন্স দেখুন। | ঐচ্ছিক | Char |
variableSuffix |
ফ্লো ভেরিয়েবলে ঐচ্ছিকভাবে ট্রেলিং ডিলিমিটার নির্দিষ্ট করে। ডিফল্ট হিসেবে "}" থাকে। আরও তথ্যের জন্য, ফ্লো ভেরিয়েবল রেফারেন্স দেখুন। | ঐচ্ছিক | Char |
<QueryParams> (<Set>-এর চাইল্ড)
অনুরোধে আগে থেকে থাকা কোয়েরি প্যারামিটার নতুন ভ্যালু দিয়ে ওভাররাইট করে। উত্তরের উপর এই এলিমেন্টের কোনও প্রভাব পড়ে না।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | <QueryParam> এলিমেন্টের অ্যারে |
| পেরেন্ট এলিমেন্ট |
<Set>
|
| চাইল্ড এলিমেন্ট |
<QueryParam> |
<QueryParams> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Set>
<QueryParams>
<QueryParam name="queryparam_name">queryparam_value</QueryParam>
...
</QueryParams>
</Set>
</AssignMessage>উদাহরণ ১
নিচের উদাহরণে "address" কোয়েরি প্যারামিটারকে
request.header.address ভেরিয়েবলের ভ্যালু হিসেবে সেট করা হয়েছে:
<AssignMessage name="AM-set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <QueryParams> ব্যবহার করতে পারবেন:
- HTTP ক্রিয়া: GET
- মেসেজের ধরন: অনুরোধ
আপনি যদি নিজের নীতিতে খালি কোয়েরি প্যারামিটার
(<Set><QueryParams/></Set>) নির্ধারণ করেন, তাহলে নীতি কোনও কোয়েরি
প্যারামিটার সেট করে না। এটি <QueryParams> বাদ দেওয়ার মতোই।
<ReasonPhrase> (<Set>-এর চাইল্ড)
উত্তরে কারণের বাক্যাংশ সেট করে। এটি সাধারণত
<StatusCode>-এর সাথে একসাথে ডিবাগ করার জন্য করা হয়। অনুরোধের উপর এই এলিমেন্টের কোনও প্রভাব পড়ে না।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | স্ট্রিং |
| পেরেন্ট এলিমেন্ট |
<Set>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<ReasonPhrase> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
উদাহরণ ১
নিচের উদাহরণে একটি সাধারণ কারণমূলক বাক্যাংশকে সংজ্ঞায়িত করা হয়েছে:
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
উদাহরণ ২
<ReasonPhrase>-এর কন্টেন্টকে মেসেজ টেমপ্লেট হিসেবে বিবেচনা করা হয়। এর অর্থ হল
কার্লি ব্রেসে মোড়ানো ভেরিয়েবলের নাম রানটাইমে রেফারেন্স করা ভেরিয়েবলের
ভ্যালু দিয়ে পরিবর্তন করা হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
<AssignMessage name="AM-set-reasonphrase-2">
<Set>
<ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <ReasonPhrase> ব্যবহার করতে পারবেন:
- মেসেজের ধরন: উত্তর
<StatusCode> (<Set>-এর চাইল্ড)
উত্তরে স্ট্যাটাস কোড সেট করে। অনুরোধের উপর এই এলিমেন্টের কোনও প্রভাব পড়ে না।
| ডিফল্ট ভ্যালু | '200' (<AssignTo>-এর createNew অ্যাট্রিবিউট
'true' হিসেবে সেট করা থাকলে) |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | স্ট্রিং বা variable |
| পেরেন্ট এলিমেন্ট |
<Set>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<StatusCode> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
নমুনা ১
নিচের উদাহরণটি একটি সাধারণ স্ট্যাটাস কোড সেট করে:
<AssignMessage name="AM-set-statuscode-404">
<Set>
<StatusCode>404</StatusCode>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>নমুনা ২
<StatusCode>-এর কন্টেন্টকে মেসেজ টেমপ্লেট হিসেবে বিবেচনা করা হয়। এর অর্থ হল, কার্লি ব্রেসে মোড়ানো ভেরিয়েবলের নাম রানটাইমে
রেফারেন্স করা ভেরিয়েবলের ভ্যালু দিয়ে পরিবর্তন করা হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
<AssignMessage name="set-statuscode-2">
<Set>
<StatusCode>{calloutresponse.status.code}</StatusCode>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <StatusCode> ব্যবহার করতে পারবেন:
- মেসেজের ধরন: উত্তর
<Verb> (<Set>-এর চাইল্ড)
অনুরোধে HTTP ক্রিয়া সেট করে। উত্তরের উপর এই এলিমেন্টের কোনও প্রভাব পড়ে না।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | স্ট্রিং বা variable |
| পেরেন্ট এলিমেন্ট |
<Set>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<Verb> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিন্ট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
উদাহরণ ১
নিচে দেওয়া উদাহরণটি অনুরোধে একটি সাধারণ ক্রিয়া সেট করে:
<AssignMessage name="AM-set-verb-1">
<Set>
<Verb>POST</Verb>
</Set>
<AssignTo>request</AssignTo>
</AssignMessage>উদাহরণ ২
<Verb>-এর কন্টেন্টকে মেসেজ টেমপ্লেট হিসেবে বিবেচনা করা হয়। এর অর্থ হল, কার্লি ব্রেসে মোড়ানো
ভেরিয়েবলের নাম রানটাইমে রেফারেন্স করা
ভেরিয়েবলের ভ্যালু দিয়ে পরিবর্তন করা হবে।
নিম্নলিখিত উদাহরণে, একটি ক্রিয়া পূরণ করতে ভেরিয়েবল ব্যবহার করা হয়েছে:
<AssignMessage name="AM-set-verb-to-dynamic-value"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo>request</AssignTo> </AssignMessage>
নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <Verb> ব্যবহার করতে পারবেন:
- মেসেজের ধরন: অনুরোধ
<Version> (<Set>-এর চাইল্ড)
অনুরোধে HTTP ভার্সন সেট করে। উত্তরের উপর এই এলিমেন্টের কোনও প্রভাব পড়ে না।
| ডিফল্ট ভ্যালু | প্রযোজ্য নয় |
| প্রয়োজনীয়? | ঐচ্ছিক |
| টাইপ করুন | স্ট্রিং বা variable |
| পেরেন্ট এলিমেন্ট |
<Set>
|
| চাইল্ড এলিমেন্ট | কোনওটিই নয় |
<Version> এলিমেন্ট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
সিনট্যাক্স
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
উদাহরণ ১
নিচে দেওয়া উদাহরণে ভার্সন নম্বর "1.1" হিসেবে সেট করা হয়েছে:
<AssignMessage name="AM-set-version-1">
<Set>
<Version>1.1</Version>
</Set>
</AssignMessage>নমুনা ২
নিম্নলিখিত কোডে ভার্সন নম্বর সেট করার জন্য কার্লি ব্রেসে ভেরিয়েবল ব্যবহার করা হয়েছে:
<AssignMessage name="AM-set-version-2">
<Set>
<Version>{my_version}</Version>
</Set>
<AssignTo>request</AssignTo>
</AssignMessage><Version>-এর কন্টেন্টকে মেসেজ টেমপ্লেট হিসেবে বিবেচনা করা হয়। এর অর্থ হল, কার্লি ব্রেসে মোড়ানো
ভেরিয়েবলের নাম রানটাইমে রেফারেন্স করা
ভেরিয়েবলের ভ্যালু দিয়ে পরিবর্তন করা হবে।
নিচে উল্লেখ করা প্রয়োজনীয়তা পূরণ করলে তবেই আপনি <Version> ব্যবহার করতে পারবেন:
- মেসেজের ধরন: অনুরোধ
অনুরোধের কাস্টম মেসেজ তৈরি করা
কাস্টম অনুরোধ মেসেজ তৈরি করতে আপনি AssignMessage নীতি ব্যবহার করতে পারেন। কাস্টম অনুরোধ তৈরি করার পরে, আপনি এটি নিম্নলিখিত উপায়ে ব্যবহার করতে পারবেন:
- অন্যান্য নীতিতে এর ভেরিয়েবল অ্যাক্সেস করা
- এটি কোনও এক্সটার্নাল পরিষেবায় পাস করা
কাস্টম অনুরোধ মেসেজ তৈরি করতে, আপনার AssignMessage নীতিতে <AssignTo> এলিমেন্ট ব্যবহার করুন
নীতি। createNew-কে "true" হিসেবে সেট করুন এবং এলিমেন্টের বডিতে
নতুন মেসেজের নাম উল্লেখ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
<AssignMessage name="AM-assignto-2"> <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> </AssignMessage>
সাধারণত, Edge কাস্টম অনুরোধ মেসেজ নিয়ে কিছু করে না। এটি তৈরি করার পরে, Edge আসল অনুরোধের সাথে ফ্লো চালিয়ে যাবে। কাস্টম অনুরোধ ব্যবহার করতে, আপনার প্রক্সিতে ServiceCallout নীতির মতো একটি নীতি যোগ করুন যা কাস্টম অনুরোধটি একটি এক্সটার্নাল পরিষেবায় পাস করতে পারে।
নিম্নলিখিত উদাহরণগুলি কাস্টম অনুরোধ মেসেজ তৈরি করে:
উদাহরণ ১
নিচে দেওয়া উদাহরণে Assign Message সহ কাস্টম অনুরোধ অবজেক্ট তৈরি করা হয়েছে:
<AssignMessage name="AssignMessage-3"> <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo> <Copy> <Headers> <Header name="user-agent"/> </Headers> </Copy> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.addy}</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <IgnoreUnresolvedVariables>false </IgnoreUnresolvedVariables> </AssignMessage>
এই উদাহরণ:
- "MyCustomRequest" নামের একটি নতুন অনুরোধ মেসেজ অবজেক্ট তৈরি করে।
- MyCustomRequest-এ, এই নীতি:
- আগত অনুরোধ থেকে
user-agentHTTP হেডারের ভ্যালু কপি করে নতুন মেসেজে পেস্ট করে।<Copy>-এuser-agentফ্লো ভেরিয়েবলের একটি অ্যাবসলিউট রেফারেন্স ব্যবহার করা হয় বলে,<Copy>-এsourceঅ্যাট্রিবিউট নির্দিষ্ট করার প্রয়োজন নেই। - ইনকামিং অনুরোধের
addyকোয়েরি প্যারামিটারের ভ্যালু কাস্টম মেসেজেaddressকোয়েরি প্যারামিটার হিসেবে সেট করে। - HTTP ক্রিয়াকে
GETহিসেবে সেট করে।
- আগত অনুরোধ থেকে
<IgnoreUnresolvedVariables>-কে "false" হিসেবে সেট করে।<IgnoreUnresolvedVariables>"false" হলে, নীতি যে ভেরিয়েবল যোগ করার চেষ্টা করছে সেটি না থাকলে, Edge API ফ্লোতে প্রসেসিং বন্ধ করে দেবে।
উদাহরণ ২
Assign Message ব্যবহার করে কীভাবে কাস্টম অনুরোধ অবজেক্ট তৈরি করতে হয় তা এই উদাহরণে দেখানো হয়েছে:
<AssignMessage name="AssignMessage-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> <Payload contentType="text/xml"> <request><operation>105</operation></request> </Payload> </Set> </AssignMessage>
এই উদাহরণে "partner.request" নামে একটি নতুন কাস্টম অনুরোধ তৈরি করা হয়েছে। এটি তারপরে নতুন অনুরোধে
<Verb> এবং <Payload> সেট করে।
আপনি অন্য AssignMessage নীতিতে কাস্টম অনুরোধ মেসেজ অ্যাক্সেস করতে পারবেন যা ফ্লোতে পরে
দেখা যায়। নিচের উদাহরণটি কাস্টম অনুরোধ মেসেজের
user-agent হেডার থেকে ভ্যালু পায়:
<AssignMessage name="custom-request-1-access">
<DisplayName>custom-request-1-access</DisplayName>
<AssignTo>partner.request</AssignTo>
<Set>
<Headers>
<Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
</Headers>
</Set>
</AssignMessage>ভিডিও
AssignMessage নীতি সম্পর্কে আরও জানতে নিম্নলিখিত ভিডিও দেখুন।
| ভিডিও | বিবরণ |
|---|---|
| কেন মেসেজ নীতি অ্যাসাইন করবেন? | ব্যাকএন্ড কোড পরিবর্তন না করেই API অনুরোধ বা উত্তর পরিবর্তন করার জন্য AssignMessage নীতি ব্যবহার করার সুবিধা সম্পর্কে জানুন। |
| AssignMessage নীতি ব্যবহার করে API এলিমেন্ট কপি করা | API অনুরোধ বা উত্তর থেকে এলিমেন্ট কপি করুন এবং AssignMessage নীতি ব্যবহার করে নতুন অনুরোধ বা উত্তর অবজেক্ট তৈরি করুন। |
| AssignMessage নীতি ব্যবহার করে API এলিমেন্ট সরানো | API এলিমেন্ট সরিয়ে দিন এবং AssignMessage নীতি ব্যবহার করে টার্গেট ব্যাকএন্ডে পৌঁছানোর আগে API পরিবর্তন করুন। |
| AssignMessage নীতি ব্যবহার করে API এলিমেন্ট যোগ ও সেট করা | AssignMessage নীতি ব্যবহার করে কোয়েরি প্যারামিটার, হেডার, ফর্ম প্যারামিটার বা পে-লোড যোগ করার মাধ্যমে API অনুরোধ বা উত্তর পরিবর্তন করুন। |
| AssignMessage নীতি ব্যবহার করে কাস্টম ভেরিয়েবল তৈরি করা | AssignMessage নীতি ব্যবহার করে কাস্টম ফ্লো ভেরিয়েবল সেট করুন এবং API প্রক্সির অন্যান্য নীতিতে ভেরিয়েবল ব্যবহার করুন। |
| AssignMessage নীতি ব্যবহার করে নতুন অনুরোধ বা উত্তর অবজেক্ট তৈরি করুন | API রানটাইমে AssignMessage নীতি ব্যবহার করে নতুন API অনুরোধ বা উত্তর অবজেক্ট তৈরি করুন। |
| AssignMessage নীতি ব্যবহার করে মক API তৈরি করুন | উত্তর ফ্লোতে AssignMessage নীতি যোগ করে একটি সাধারণ মক REST API তৈরি করুন। |
| AssignMessage নীতি ব্যবহার করে পে-লোড সেট বা পরিবর্তন করা | API রানটাইমে AssignMessage নীতি ব্যবহার করে SOAP পেলোড সেট করার মাধ্যমে REST অনুরোধকে SOAP অনুরোধে কনভার্ট করুন। |
সমস্যার কোড
এই নীতি কোনও সমস্যার কারণে ট্রিগার হলে, Edge-এর মাধ্যমে ফেরত আসা ফল্ট কোড ও সমস্যার মেসেজ এবং সেট করা ফল্ট ভেরিয়েবল সম্পর্কে এই বিভাগে বর্ণনা করা হয়েছে। সমস্যা সমাধানের জন্য আপনি যদি ফল্ট রুল ডেভেলপ করেন, তাহলে এই তথ্য জানা আপনার জন্য গুরুত্বপূর্ণ। আরও জানতে, নীতি সংক্রান্ত সমস্যা সম্পর্কে আপনার যা জানা প্রয়োজন এবং ত্রুটি মোকাবেলা করা দেখুন।
রানটাইম সমস্যা
নীতি এক্সিকিউট করার সময় এই সমস্যা হতে পারে।
| সমস্যার কোড | HTTP স্ট্যাটাস | কারণ | এর সমাধান করুন |
|---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | নীতিটি কোনও ভেরিয়েবল সেট করতে পারেনি। সমাধান না হওয়া ভেরিয়েবলের নামের জন্য ফল্ট স্ট্রিং দেখুন। | |
steps.assignmessage.VariableOfNonMsgType |
500 |
মেসেজ টাইপ ভেরিয়েবল সম্পূর্ণ HTTP অনুরোধ ও উত্তরকে উপস্থাপন করে। বিল্ট-ইন Edge
ফ্লো ভেরিয়েবল |
build |
steps.assignmessage.UnresolvedVariable |
500 |
Assign Message নীতিতে উল্লেখ করা কোনও ভেরিয়েবল যদি:
|
build |
ডিপ্লয়মেন্ট সংক্রান্ত সমস্যা
এই নীতি থাকা কোনও প্রক্সি আপনি প্রয়োগ করলে, এই সমস্যা হতে পারে।
| সমস্যার নাম | কারণ | এর সমাধান করুন |
|---|---|---|
InvalidIndex |
Assign Message
নীতির <Copy> এবং/অথবা <Remove> এলিমেন্টে নির্দিষ্ট করা ইন্ডেক্স ০ বা নেগেটিভ সংখ্যা হলে, API প্রক্সি ডেপ্লয় করা যায় না।
|
build |
InvalidVariableName |
চাইল্ড এলিমেন্ট <Name> খালি থাকলে বা <AssignVariable> এলিমেন্টে উল্লেখ করা না থাকলে,
API প্রক্সি ডেপ্লয় করা যায় না, কারণ কোনও সঠিক ভেরিয়েবল নাম নেই
যেখানে কোনও ভ্যালু অ্যাসাইন করা যায়। ভেরিয়েবলের সঠিক নাম লিখতে হবে।
|
build |
InvalidPayload |
নীতিতে উল্লেখ করা পেলোড সঠিক নয়। |
ফল্ট ভেরিয়েবল
এই নীতি রানটাইমে কোনও সমস্যা ট্রিগার করলে, এইসব ভেরিয়েবল সেট করা হয়। আরও তথ্যের জন্য, নীতি সংক্রান্ত সমস্যার ব্যাপারে আপনার কী জানা প্রয়োজন দেখুন।
| ভেরিয়েবল | কোথায় | উদাহরণ |
|---|---|---|
fault.name="fault_name" |
fault_name হল সমস্যার নাম, যা উপরে দেওয়া রানটাইম সংক্রান্ত সমস্যা সারণীতে তালিকাভুক্ত করা আছে। ফল্ট কোডের শেষ অংশটি হল ফল্টের নাম। | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name হল সেই নীতির ব্যবহারকারী-নির্দিষ্ট নাম যার কারণে সমস্যা হয়েছে। | assignmessage.AM-SetResponse.failed = true |
সমস্যার উত্তরের উদাহরণ
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
ভুল নিয়মের উদাহরণ
<FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
স্কিমা
প্রতিটি নীতির ধরন XML স্কিমা (.xsd) দ্বারা সংজ্ঞায়িত করা হয়। রেফারেন্সের জন্য, নীতি স্কিমা
GitHub-এ উপলভ্য।
সম্পর্কিত বিষয়
API Platform samples-এ কাজ করে এমন AssignMessage-এর নমুনা নীতি উপলভ্য।
target.url থেকে
ProxyEndpoint ওভাররাইড করার আরও উন্নত উদাহরণ দেখতে, এই Apigee কমিউনিটি নিবন্ধ দেখুন।
ServiceCallout নীতিতে "সেট পাথ" অ্যাকশনে দেখতে, Apigee GitHub স্যাম্পেলে এই করে শেখার উদাহরণ দেখুন। শুধু রেপোজিটরি ক্লোন করুন এবং সেই বিষয়ে দেওয়া নির্দেশাবলী অনুসরণ করুন। এই উদাহরণে, AssignMessage নীতি ব্যবহার করে অনুরোধের পাথ সেট করা হয়েছে, তারপরে Service Callout নীতি ব্যবহার করে এক্সটার্নাল পরিষেবায় অনুরোধ করা হয়েছে।