আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
কন্ডিশনগুলো এপিআই প্রক্সিগুলোকে রানটাইমে গতিশীলভাবে কাজ করতে সক্ষম করে। কন্ডিশনগুলো ভেরিয়েবলের উপর অপারেশন নির্ধারণ করে, যা Apigee Edge প্রসেসিং পাইপলাইন দ্বারা মূল্যায়ন করা হয়। কন্ডিশনাল স্টেটমেন্টগুলো বুলিয়ান এবং সর্বদা true বা false হিসেবে মূল্যায়ন করা হয়।
অবস্থার সংক্ষিপ্ত বিবরণ
এই অংশে Edge-এ কীভাবে এবং কোথায় কন্ডিশনাল স্টেটমেন্ট ব্যবহার করতে হয় তা বর্ণনা করা হয়েছে। এছাড়াও, নিম্নলিখিত অংশগুলিতে এর সিনট্যাক্স বর্ণনা করা হয়েছে:
শর্তসাপেক্ষ বিবৃতির গঠন
শর্তসাপেক্ষ বিবৃতির মৌলিক কাঠামোটি হলো:
<Condition>variable.name operator "value"</Condition>
উদাহরণস্বরূপ:
<Condition>request.verb = "GET"</Condition>
একই সাথে একাধিক শর্ত কার্যকর করতে আপনি AND ব্যবহার করে শর্তগুলো একত্রিত করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত শর্তগুলো কেবল তখনই true বলে বিবেচিত হবে, যদি অনুরোধের URI, /statuses এর সাথে মেলে এবং অনুরোধের HTTP ভার্বটি GET হয়:
<Condition>(proxy.pathsuffix MatchesPath "/statuses") and (request.verb = "GET")</Condition>
কোথায় আপনি শর্তসাপেক্ষ বিবৃতি ব্যবহার করতে পারেন
আপনি নিম্নলিখিত ক্ষেত্রে আচরণ নিয়ন্ত্রণ করতে শর্ত ব্যবহার করতে পারেন:
নীতি বাস্তবায়ন
কন্ডিশনাল স্টেটমেন্ট ব্যবহার করে আপনি পলিসি প্রয়োগ নিয়ন্ত্রণ করতে পারেন। এর একটি সাধারণ ব্যবহার হলো HTTP হেডার বা মেসেজের বিষয়বস্তুর ওপর ভিত্তি করে রেসপন্স মেসেজের শর্তসাপেক্ষ রূপান্তর।
নিম্নলিখিত উদাহরণটি Accept হেডারের উপর ভিত্তি করে শর্তসাপেক্ষে XML কে JSON এ রূপান্তর করে:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
প্রবাহ সম্পাদন
শর্তসাপেক্ষ বিবৃতি ব্যবহার করে, আপনি ProxyEndpoints এবং TargetEndpoints-এ নামযুক্ত ফ্লো-এর নির্বাহ নিয়ন্ত্রণ করতে পারেন। মনে রাখবেন যে শুধুমাত্র 'নামযুক্ত' ফ্লো-ই শর্তসাপেক্ষে নির্বাহ করা যায়। ProxyEndpoints এবং TargetEndpoints-এর প্রিফ্লো এবং পোস্টফ্লো (অনুরোধ এবং প্রতিক্রিয়া উভয়ই) প্রতিটি লেনদেনের জন্য নির্বাহ হয়, এবং এর ফলে শর্তহীন 'ফেলসেফ' সক্ষমতা প্রদান করে।
উদাহরণস্বরূপ, অনুরোধ বার্তার HTTP ভার্বের উপর ভিত্তি করে একটি শর্তসাপেক্ষ অনুরোধ প্রবাহ এবং ত্রুটির প্রতিনিধিত্বকারী একটি (সম্ভাব্য) HTTP স্ট্যাটাস কোডের উপর ভিত্তি করে একটি শর্তসাপেক্ষ প্রতিক্রিয়া প্রবাহ কার্যকর করতে:
<Flow name="GetRequests">
<Condition>request.verb = "GET"</Condition>
<Request>
<Step>
<Condition>request.path MatchesPath "/statuses/**"</Condition>
<Name>StatusesRequestPolicy</Name>
</Step>
</Request>
<Response>
<Step>
<Condition>(response.status.code = 503) or (response.status.code = 400)</Condition>
<Name>MaintenancePolicy</Name>
</Step>
</Response>
</Flow>লক্ষ্য এন্ডপয়েন্ট রুট নির্বাচন
শর্তসাপেক্ষ বিবৃতি ব্যবহার করে, আপনি প্রক্সি এন্ডপয়েন্ট কনফিগারেশন দ্বারা ব্যবহৃত টার্গেট এন্ডপয়েন্ট নিয়ন্ত্রণ করতে পারেন। একটি রাউট রুল কোনো অনুরোধকে একটি নির্দিষ্ট টার্গেট এন্ডপয়েন্টে ফরোয়ার্ড করে। যখন একাধিক টার্গেট এন্ডপয়েন্ট উপলব্ধ থাকে, তখন রাউট রুলটির শর্ত মূল্যায়ন করা হয় এবং যদি তা সত্য হয়, তবে অনুরোধটি নির্দিষ্ট নামের টার্গেট এন্ডপয়েন্টে ফরোয়ার্ড করা হয়।
উদাহরণস্বরূপ, Content-Type এর উপর ভিত্তি করে শর্তসাপেক্ষে মেসেজগুলিকে নির্দিষ্ট টার্গেট এন্ডপয়েন্টে রাউট করতে:
<RouteRule name="default">
<!--this routing executes if the header indicates that this is an XML call. If true, the call is routed to the endpoint XMLTargetEndpoint-->
<Condition>request.header.Content-Type = "text/xml"</Condition>
<TargetEndpoint>XmlTargetEndpoint</TargetEndpoint>
</RouteRule>আরও তথ্যের জন্য ফ্লো ভেরিয়েবল এবং শর্তাবলী দেখুন।
পথের অভিব্যক্তি
URI পাথ মেলানোর জন্য পাথ এক্সপ্রেশন ব্যবহার করা হয়, যেখানে একটিমাত্র পাথ এলিমেন্ট বোঝাতে "*" এবং একাধিক URI লেভেল বোঝাতে "**" ব্যবহৃত হয়।
উদাহরণস্বরূপ:
| প্যাটার্ন | নমুনা URI পাথ মিলেছে |
|---|---|
/*/a/ | /x/a/ অথবা /y/a/ |
/*/a/* | /x/a/b অথবা /y/a/foo |
/*/a/** | /x/a/b/c/d |
/*/a/*/feed/ | /x/a/b/feed/ অথবা /y/a/foo/feed/ |
/a/**/feed/** | /a/b/feed/rss/1234 |
% একটি এস্কেপ ক্যারেক্টার হিসেবে গণ্য করা হয়। %{user%} প্যাটার্নটি {user} এর সাথে মেলে, কিন্তু user সাথে মেলে না।
ভেরিয়েবল
আপনি কন্ডিশনাল স্টেটমেন্টে বিল্ট-ইন ফ্লো ভেরিয়েবল এবং কাস্টম ভেরিয়েবল উভয়ই ব্যবহার করতে পারেন। আরও তথ্যের জন্য দেখুন:
- ফ্লো ভেরিয়েবল রেফারেন্স : বিল্ট-ইন ভেরিয়েবলগুলোর একটি সম্পূর্ণ তালিকা
- ExtractVariables নীতি : কাস্টম ভেরিয়েবল সেট করার নির্দেশাবলী
অপারেটররা
অপারেটর ব্যবহার করার সময় নিম্নলিখিত বিধিনিষেধগুলি মেনে চলুন:
- অপারেটরগুলোকে ভেরিয়েবলের নাম হিসেবে ব্যবহার করা যায় না।
- অপারেটরের আগে ও পরে একটি স্পেস দিতে হবে।
- ভেরিয়েবলে কোনো অপারেটর অন্তর্ভুক্ত করতে হলে, ভেরিয়েবলের নামটি অবশ্যই একক উদ্ধৃতি চিহ্নের (single quotes) মধ্যে রাখতে হবে। উদাহরণস্বরূপ,
'request.header.help!me'। - গাণিতিক অপারেটর (
+ * - / %) সমর্থিত নয়। - জাভাতে অপারেটরগুলোর জন্য প্রেসিডেন্স ব্যবহার করা হয়।
- Apigee Edge,
java.util.regexএ বাস্তবায়িত রেগুলার এক্সপ্রেশনের উপর নির্ভর করে।
নিম্নলিখিত সারণিতে সমর্থিত অপারেটরগুলো তালিকাভুক্ত করা হয়েছে। আপনি আপনার এক্সপ্রেশনে প্রতীক অথবা শব্দটি ব্যবহার করতে পারেন:
| প্রতীক | শব্দ | বর্ণনা |
|---|---|---|
! | Not , not | ইউনারি অপারেটর (একটি মাত্র ইনপুট গ্রহণ করে) |
= | Equals , Is | সমান (কেস সংবেদনশীল) |
!= | NotEquals , IsNot | সমান নয় (কেস সংবেদনশীল) |
:= | EqualsCaseInsensitive | সমান কিন্তু কেস-ইনসেনসিটিভ। |
> > | GreaterThan | বৃহত্তর। Edge UI-তে শর্ত নির্ধারণ করার সময় আপনি যদি > ব্যবহার করেন, তাহলে তা >-এ রূপান্তরিত হয়। |
>= অথবা >= | GreaterThanOrEquals | এর চেয়ে বড় বা সমান। আপনি যদি Edge UI-তে শর্ত নির্ধারণ করার সময় >= ব্যবহার করেন, তাহলে তা >=-এ রূপান্তরিত হয়। |
< | LesserThan | এর চেয়ে ছোট। Edge UI আক্ষরিক < চিহ্নটি সমর্থন করে না। |
<= | LesserThanOrEquals | এর চেয়ে কম বা সমান। Edge UI আক্ষরিক <= সমর্থন করে না। |
&& | And , and | এবং |
|| | Or | Or অপারেটরটি কেস-সেনসিটিভ নয়। উদাহরণস্বরূপ, OR , Or এবং or সবই বৈধ। |
() | একটি এক্সপ্রেশনকে গ্রুপ করে। ( এক্সপ্রেশনটি খোলে এবং ) এটি বন্ধ করে। | |
~~ | জাভারেজেক্স | |
~ | Matches , Like | "*" ওয়াইল্ডকার্ড ক্যারেক্টার ব্যবহার করে একটি গ্লোব-স্টাইল প্যাটার্নের সাথে মেলে। এই মিলটি কেস-সেনসিটিভ। উদাহরণের জন্য, কন্ডিশনাল সহ প্যাটার্ন ম্যাচিং দেখুন। |
~/ | MatchesPath , LikePath | একটি পাথ এক্সপ্রেশনের সাথে মেলে। এই মিলটি কেস-সেনসিটিভ। উদাহরণের জন্য, কন্ডিশনাল ব্যবহার করে প্যাটার্ন ম্যাচিং দেখুন। |
=| | StartsWith | একটি স্ট্রিং-এর প্রথম অক্ষরগুলোর সাথে মেলে। এই মিলটি কেস-সেনসিটিভ। |
অপারেন্ড
Apigee Edge তুলনা করার আগে অপারেন্ডগুলোকে একটি সাধারণ ডেটা টাইপে রূপান্তরিত করে। উদাহরণস্বরূপ, যদি রেসপন্স স্ট্যাটাস কোড 404 হয়, তাহলে response.status.code = "400" এবং ` response.status.code = 400 এক্সপ্রেশন দুটি সমতুল্য।
সংখ্যাসূচক অপারেন্ডের ক্ষেত্রে, ডেটা টাইপটিকে পূর্ণসংখ্যা হিসাবে গণ্য করা হয়, যদি না মানটি নিম্নরূপে সমাপ্ত করা হয়:
- "f" বা "F" (ফ্লোট, যেমন, 3.142f, 91.1F)
- 'd' বা 'D' (দ্বিগুণ, উদাহরণস্বরূপ, 3.142d, 100.123D)
- "l" বা "L" (যেমন, 12321421312L)
এই ক্ষেত্রে, সিস্টেমটি নিম্নলিখিত সারণীতে দেখানো অভিযোজনগুলি সম্পাদন করে (যেখানে RHS বলতে সমীকরণের ডান দিক এবং LHS বলতে বাম দিক বোঝায়):
| আরএইচএস এলএইচএস | বুলিয়ান | পূর্ণসংখ্যা | দীর্ঘ | ভাসা | দ্বিগুণ | স্ট্রিং | তুলনীয় | বস্তু |
|---|---|---|---|---|---|---|---|---|
| বুলিয়ান | বুলিয়ান | পূর্ণসংখ্যা | দীর্ঘ | ভাসা | দ্বিগুণ | স্ট্রিং | - | |
| পূর্ণসংখ্যা | পূর্ণসংখ্যা | পূর্ণসংখ্যা | দীর্ঘ | ভাসা | দ্বিগুণ | স্ট্রিং | তুলনীয় | - |
| দীর্ঘ | দীর্ঘ | দীর্ঘ | দীর্ঘ | ভাসা | দ্বিগুণ | স্ট্রিং | তুলনীয় | - |
| ভাসা | ভাসা | ভাসা | ভাসা | ভাসা | দ্বিগুণ | স্ট্রিং | তুলনীয় | - |
| দ্বিগুণ | দ্বিগুণ | দ্বিগুণ | দ্বিগুণ | দ্বিগুণ | দ্বিগুণ | স্ট্রিং | তুলনীয় | - |
| স্ট্রিং | স্ট্রিং | স্ট্রিং | স্ট্রিং | স্ট্রিং | স্ট্রিং | স্ট্রিং | তুলনীয় | - |
| তুলনীয় | তুলনীয় | তুলনীয় | তুলনীয় | তুলনীয় | তুলনীয় | তুলনীয় | তুলনীয় | - |
| বস্তু | - | - | - | - | - | - | - | - |
নাল অপারেন্ড
নিম্নলিখিত সারণিটি দেখায় যে, প্রদর্শিত অপারেন্ডের বাম-পার্শ্ব (LHS) এবং/অথবা ডান-পার্শ্ব (RHS)-এর মান নাল (null) হলে শর্তগুলি true না false হিসেবে বিবেচিত হবে:
| অপারেটর | বামপক্ষ শূন্য | আরএইচএস নাল | বাম এবং ডান দিক শূন্য |
|---|---|---|---|
= , == , := | মিথ্যা | মিথ্যা | সত্য |
=| | মিথ্যা | মিথ্যা | মিথ্যা |
!= | সত্য | সত্য | মিথ্যা |
> > | সত্য | মিথ্যা | মিথ্যা |
>= অথবা >= | মিথ্যা | সত্য | সত্য |
< | সত্য | মিথ্যা | মিথ্যা |
<= | সত্য | মিথ্যা | সত্য |
~ | মিথ্যা | প্রযোজ্য নয় | মিথ্যা |
~~ | মিথ্যা | প্রযোজ্য নয় | মিথ্যা |
!~ | সত্য | মিথ্যা | মিথ্যা |
~/ | মিথ্যা | প্রযোজ্য নয় | মিথ্যা |
আক্ষরিক
স্ট্রিং এবং নিউমেরিক লিটারেল ছাড়াও, আপনি কন্ডিশনাল স্টেটমেন্টে নিম্নলিখিত লিটারেলগুলো ব্যবহার করতে পারেন:
-
null -
true -
false
উদাহরণস্বরূপ:
-
request.header.host is null -
flow.cachehit is true
উদাহরণ
<RouteRule name="default"> <Condition>request.header.content-type = "text/xml"</Condition> <TargetEndpoint>XmlTargetEndpoint</TargetEndpoint> </RouteRule>
<Step>
<Condition>response.status.code = 503</Condition>
<Name>MaintenancePolicy</Name>
</Step><Flow name="GetRequests">
<Condition>response.verb="GET"</Condition>
<Request>
<Step>
<Condition>request.path ~ "/statuses/**"</Condition>
<Name>StatusesRequestPolicy</Name>
</Step>
</Request>
<Response>
<Step>
<Condition>(response.status.code = 503) or (response.status.code = 400)</Condition>
<Name>MaintenancePolicy</Name>
</Step>
</Response>
</Flow>