আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান । তথ্য
শর্তাবলী API প্রক্সিগুলিকে রানটাইমে গতিশীলভাবে আচরণ করতে সক্ষম করে। শর্তগুলি ভেরিয়েবলের উপর ক্রিয়াকলাপগুলিকে সংজ্ঞায়িত করে, যেগুলি Apigee Edge প্রক্রিয়াকরণ পাইপলাইন দ্বারা মূল্যায়ন করা হয়। শর্তসাপেক্ষ বিবৃতি বুলিয়ান এবং সর্বদা true
বা false
মূল্যায়ন করে।
শর্ত ওভারভিউ
এই বিভাগটি বর্ণনা করে কিভাবে এবং কোথায় এজ এর সাথে শর্তসাপেক্ষ বিবৃতি ব্যবহার করতে হয়। উপরন্তু, নিম্নলিখিত বিভাগ সিনট্যাক্স বর্ণনা:
শর্তাধীন বিবৃতি গঠন
শর্তসাপেক্ষ বিবৃতির মৌলিক গঠন হল:
<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 শিরোনাম বা বার্তা বিষয়বস্তুর উপর ভিত্তি করে প্রতিক্রিয়া বার্তাগুলির শর্তসাপেক্ষ রূপান্তর।
নিম্নলিখিত উদাহরণ শর্তসাপেক্ষে XML-কে JSON-এ রূপান্তরিত করে Accept
হেডারের উপর ভিত্তি করে:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
ফ্লো এক্সিকিউশন
শর্তসাপেক্ষ বিবৃতি ব্যবহার করে, আপনি 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 পাথ মিলেছে |
---|---|
/*/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 নীতি : কাস্টম ভেরিয়েবল সেট করার নির্দেশাবলী
অপারেটর
অপারেটর ব্যবহার করার সময়, নিম্নলিখিত বিধিনিষেধগুলি পালন করুন:
- অপারেটর পরিবর্তনশীল নাম হিসাবে ব্যবহার করা যাবে না.
- অপারেটরের আগে এবং পরে একটি স্পেস অক্ষর প্রয়োজন।
- একটি পরিবর্তনশীল মধ্যে একটি অপারেটর অন্তর্ভুক্ত করার জন্য, একটি পরিবর্তনশীল নাম একক উদ্ধৃতি মধ্যে আবদ্ধ করা আবশ্যক. উদাহরণস্বরূপ,
'request.header.help!me'
। - পাটিগণিত অপারেটর (
+ * - / %
) সমর্থিত নয়। - জাভা অগ্রাধিকার অপারেটরদের জন্য ব্যবহৃত হয়।
- Apigee Edge
java.util.regex
এ বাস্তবায়িত রেগুলার এক্সপ্রেশনের উপর নির্ভর করে।
নিম্নলিখিত সারণী সমর্থিত অপারেটরদের তালিকা করে। আপনি আপনার অভিব্যক্তিতে প্রতীক বা শব্দ ব্যবহার করতে পারেন:
প্রতীক | শব্দ | বর্ণনা |
---|---|---|
! | Not , not | ইউনারি অপারেটর (একটি ইনপুট নেয়) |
= | Equals , Is | এর সমান (কেস সংবেদনশীল) |
!= | NotEquals , IsNot | সমান নয় (কেস সংবেদনশীল) |
:= | EqualsCaseInsensitive | সমান কিন্তু কেস সংবেদনশীল |
> অথবা > | GreaterThan | এর চেয়ে বড়। আপনি যদি এজ UI-তে শর্তটি সংজ্ঞায়িত করার সময় > ব্যবহার করেন তবে এটি > তে রূপান্তরিত হয়। |
>= বা >= | GreaterThanOrEquals | এর চেয়ে বড় বা সমান। আপনি যদি এজ UI-তে শর্তটি সংজ্ঞায়িত করার সময় >= ব্যবহার করেন তবে এটি >= তে রূপান্তরিত হয়। |
< | LesserThan | থেকে কম। এজ UI আক্ষরিক < সমর্থন করে না। |
<= | LesserThanOrEquals | এর থেকে কম বা সমান। এজ UI আক্ষরিক <= সমর্থন করে না। |
&& | And , and | এবং |
|| | Or | বা অপারেটর কেস সংবেদনশীল নয়। উদাহরণস্বরূপ, OR , Or , এবং or সবই বৈধ৷ |
() | একটি অভিব্যক্তিকে দলবদ্ধ করে। ( অভিব্যক্তিটি খোলে এবং ) এটি বন্ধ করে। | |
~~ | JavaRegex | একটি |
~ | 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) মানগুলি শূন্য হলে শর্তগুলি true
বা false
মূল্যায়ন করা হয়:
অপারেটর | LHS শূন্য | RHS নাল | LHS এবং RHS নাল |
---|---|---|---|
= , == , := | মিথ্যা | মিথ্যা | সত্য |
=| | মিথ্যা | মিথ্যা | মিথ্যা |
!= | সত্য | সত্য | মিথ্যা |
> অথবা > | সত্য | মিথ্যা | মিথ্যা |
>= বা >= | মিথ্যা | সত্য | সত্য |
< | সত্য | মিথ্যা | মিথ্যা |
<= | সত্য | মিথ্যা | সত্য |
~ | মিথ্যা | N/A | মিথ্যা |
~~ | মিথ্যা | N/A | মিথ্যা |
!~ | সত্য | মিথ্যা | মিথ্যা |
~/ | মিথ্যা | N/A | মিথ্যা |
আক্ষরিক
স্ট্রিং এবং সংখ্যাসূচক আক্ষরিক ছাড়াও, আপনি শর্তসাপেক্ষ বিবৃতিতে নিম্নলিখিত আক্ষরিক ব্যবহার করতে পারেন:
-
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>