आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
इस पेज पर जाएं
Apigee X दस्तावेज़. जानकारी
शर्तों की मदद से, एपीआई प्रॉक्सी को रनटाइम के दौरान डाइनैमिक तरीके से काम करने में मदद मिलती है. शर्तों से कार्रवाइयां तय होती हैं
वैरिएबल पर, जिनका आकलन Apigee Edge की प्रोसेसिंग पाइपलाइन से होता है. कंडिशनल स्टेटमेंट
बूलियन वैल्यू होती हैं और हमेशा true
या false
के तौर पर आकलन करती हैं.
स्वास्थ्य से जुड़ी स्थितियों के बारे में खास जानकारी
इस सेक्शन में बताया गया है कि Edge के साथ कंडिशनल स्टेटमेंट का इस्तेमाल कैसे और कहां करना है. इसके अलावा, यहां दिए सेक्शन में सिंटैक्स के बारे में बताया गया है:
कंडिशनल स्टेटमेंट का स्ट्रक्चर
कंडिशनल स्टेटमेंट का बेसिक स्ट्रक्चर इस तरह है:
<Condition>variable.name operator "value"</Condition>
उदाहरण के लिए:
<Condition>request.verb = "GET"</Condition>
एक बार में एक से ज़्यादा शर्तें लागू करने के लिए, शर्तों को AND के साथ जोड़ा जा सकता है. उदाहरण के लिए,
अनुरोध का यूआरआई मेल खाने पर ही इन शर्तों का मूल्यांकन true
होगा
/statuses
और अनुरोध की एचटीटीपी क्रिया यह है
GET
:
<Condition>(proxy.pathsuffix MatchesPath "/statuses") and (request.verb = "GET")</Condition>
कंडिशनल स्टेटमेंट का इस्तेमाल कहां किया जा सकता है
इन स्थितियों में व्यवहार को कंट्रोल करने के लिए, शर्तों का इस्तेमाल किया जा सकता है:
नीति लागू होने की प्रोसेस
कंडिशनल स्टेटमेंट का इस्तेमाल करके, नीतियों को लागू करने के तरीके को कंट्रोल किया जा सकता है. इस्तेमाल का एक सामान्य उदाहरण यह रिस्पॉन्स मैसेज में शर्त के साथ बदलाव करता है. यह एचटीटीपी हेडर या मैसेज के कॉन्टेंट के आधार पर तय होता है.
इस उदाहरण में, Accept
के आधार पर एक्सएमएल को शर्त के साथ JSON में बदला गया है
हेडर:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
फ़्लो एक्ज़ीक्यूशन
कंडिशनल स्टेटमेंट का इस्तेमाल करके, ProxyEndpoints में नाम वाले फ़्लो को कंट्रोल किया जा सकता है और TargetEndpoints. ध्यान दें कि सिर्फ़ 'नाम' वाला फ़्लो को शर्तों के साथ लागू किया जा सकता है. प्रीफ़्लो और ProxyEndpoints और TargetEndpoints पर पोस्टफ़्लो (अनुरोध और जवाब, दोनों) हर मामले में लागू होते हैं और इसलिए, बिना किसी शर्त के 'failsafe' उपलब्ध कराता है सुविधाएं.
उदाहरण के लिए, अनुरोध की एचटीटीपी क्रिया पर आधारित एक कंडिशनल रिक्वेस्ट फ़्लो को चलाने के लिए और (संभावित) एचटीटीपी स्टेटस कोड पर आधारित कंडिशनल रिस्पॉन्स फ़्लो जो गड़बड़ी:
<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>
फ़्लो वैरिएबल और शर्तें पढ़ें.
पाथ एक्सप्रेशन
पाथ एक्सप्रेशन का इस्तेमाल, यूआरआई पाथ को मैच करने के लिए किया जाता है. इसके लिए "*" का इस्तेमाल किया जाता है सिंगल पाथ एलिमेंट को दिखाने के लिए और "**" .
उदाहरण के लिए:
पैटर्न | सैंपल यूआरआई पाथ का मिलान हुआ |
---|---|
/*/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
.
नीचे दी गई टेबल में, इस्तेमाल किए जा सकने वाले ऑपरेटर की सूची दी गई है. आप अपने शब्दों में प्रतीक या शब्द का उपयोग एक्सप्रेशन:
चिह्न | Word | ब्यौरा |
---|---|---|
! |
Not , not |
यूनरी ऑपरेटर (एक इनपुट लेता है) |
= |
Equals , Is |
इसके बराबर है (केस-सेंसिटिव) |
!= |
NotEquals , IsNot |
इसके बराबर नहीं है (केस-सेंसिटिव) |
:= |
EqualsCaseInsensitive |
बराबर है, लेकिन केस-इनसेंसिटिव है |
> या > |
GreaterThan |
इससे ज़्यादा. अगर आप > एज यूज़र इंटरफ़ेस (यूआई) में शर्त तय करते समय, यह > में बदला गया. |
>= या >= |
GreaterThanOrEquals |
इससे ज़्यादा या इसके बराबर. अगर Edge यूज़र इंटरफ़ेस (यूआई) में शर्त तय करते समय >= का इस्तेमाल किया जाता है, तो इसे >= में बदल दिया जाता है. |
< |
LesserThan |
इससे कम. Edge यूज़र इंटरफ़ेस (यूआई), लिटरल < के साथ काम नहीं करता. |
<= |
LesserThanOrEquals |
इससे कम या इसके बराबर. Edge यूज़र इंटरफ़ेस (यूआई), लिटरल <= के साथ काम नहीं करता. |
&& |
And , and |
और |
|| |
Or |
Or ऑपरेटर केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) नहीं है. उदाहरण के लिए, OR , Or , और or सभी मान्य हैं. |
() |
किसी एक्सप्रेशन को ग्रुप करता है. ( एक्सप्रेशन को खोलता है और ) बंद हो जाता है
इसे. |
|
~~ |
JavaRegex |
|
~ |
Matches , Like |
"*" का इस्तेमाल करके, ग्लोब-स्टाइल पैटर्न से मेल खाता है वाइल्डकार्ड वर्ण. यह मैच है केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) होता है. उदाहरण के लिए, इसके साथ पैटर्न मिलान देखें शर्तों के साथ. |
~/ |
MatchesPath , LikePath |
किसी पाथ एक्सप्रेशन से मेल खाता है. मैच केस-सेंसिटिव होते हैं. उदाहरण के लिए, इसके साथ पैटर्न मिलान देखें शर्तों के साथ. |
=| |
StartsWith |
किसी स्ट्रिंग के पहले वर्णों से मेल खाता है. मैच केस-सेंसिटिव होते हैं. |
ओपेरैंड्स
Apigee Edge, ऑपरेंड को किसी सामान्य डेटा टाइप के हिसाब से, तुलना करने से पहले अपना लेता है. उदाहरण के लिए, अगर
रिस्पॉन्स स्टेटस कोड 404 है, एक्सप्रेशन response.status.code = "400"
और
response.status.code = 400
के बराबर हैं.
न्यूमेरिक ऑपरेंड के लिए, डेटा टाइप को तब तक पूर्णांक माना जाता है, जब तक वैल्यू खत्म न हो जाए इस तरह से:
- "मं" या "F" (उदाहरण के लिए, फ़्लोट 3.142f, 91.1F)
- "d" या "D" (डबल, उदाहरण के लिए, 3.142d, 100.123D)
- "एल" या "L" (लॉन्ग, उदाहरण के लिए, 12321421312L)
ऐसे मामलों में, सिस्टम नीचे दी गई टेबल में दिखाए गए बदलावों के मुताबिक काम करता है (जहां RHS का मतलब है समीकरण के दाईं ओर और LHS बाईं ओर है):
दाईं ओर मौजूद बाईं ओर | बूलियन | पूर्णांक | ज़्यादा समय के लिए | फ़्लोट | डबल | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | ऑब्जेक्ट |
---|---|---|---|---|---|---|---|---|
बूलियन | बूलियन | पूर्णांक | ज़्यादा समय के लिए | फ़्लोट | डबल | स्ट्रिंग | - | |
पूर्णांक | पूर्णांक | पूर्णांक | ज़्यादा समय के लिए | फ़्लोट | डबल | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
ज़्यादा समय के लिए | ज़्यादा समय के लिए | ज़्यादा समय के लिए | ज़्यादा समय के लिए | फ़्लोट | डबल | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
फ़्लोट | फ़्लोट | फ़्लोट | फ़्लोट | फ़्लोट | डबल | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
डबल | डबल | डबल | डबल | डबल | डबल | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | - |
ऑब्जेक्ट | - | - | - | - | - | - | - | - |
शून्य ऑपरेंड
इस टेबल से पता चलता है कि शर्तों का मूल्यांकन करने पर true
या
बाईं ओर (LHS) और/या दाईं ओर (RHS) में मान शून्य होने पर false
ऑपरेंड को दिखाया गया है:
ऑपरेटर | बाईं ओर मौजूद शून्य | RHS शून्य | बाईं और दाईं ओर मौजूद खाली जगह |
---|---|---|---|
= , == , := |
गलत | गलत | true |
=| |
गलत | गलत | गलत |
!= |
true | true | गलत |
> या > |
true | गलत | गलत |
>= या >= |
गलत | true | true |
< |
true | गलत | गलत |
<= |
true | गलत | true |
~ |
गलत | लागू नहीं | गलत |
~~ |
गलत | लागू नहीं | गलत |
!~ |
true | गलत | गलत |
~/ |
गलत | लागू नहीं | गलत |
लिटरल वैल्यू
स्ट्रिंग और न्यूमेरिक लिटरल के अलावा, ये लिटरल वैल्यू इस्तेमाल की जा सकती हैं: सशर्त स्टेटमेंट:
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>