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 में नाम वाले फ़्लो को लागू करने की प्रोसेस को कंट्रोल किया जा सकता है. ध्यान दें कि सिर्फ़ 'नाम वाले' फ़्लो ही शर्त के साथ लागू किए जा सकते हैं. हर लेन-देन के लिए, प्रॉक्सीEndpoints और 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'
. - अंकगणितीय ऑपरेटर (
+ * - / %
) समर्थित नहीं हैं. - Java प्राथमिकता का इस्तेमाल ऑपरेटर के लिए किया जाता है.
- Apigee Edge,
java.util.regex
में लागू किए गए रेगुलर एक्सप्रेशन पर निर्भर करता है.
यहां दी गई टेबल में, इस्तेमाल किए जा सकने वाले ऑपरेटर की सूची दी गई है. आप अपने एक्सप्रेशन में चिह्न या शब्द का इस्तेमाल कर सकते हैं:
चिह्न | शब्द | ब्यौरा |
---|---|---|
! |
Not , not |
यूनरी ऑपरेटर (एक इनपुट लेता है) |
= |
Equals , Is |
इसके बराबर है (केस-सेंसिटिव) |
!= |
NotEquals , IsNot |
इसके बराबर नहीं है (केस-सेंसिटिव) |
:= |
EqualsCaseInsensitive |
बराबर है, लेकिन केस-इनसेंसिटिव है |
> या > |
GreaterThan |
इससे बड़ा है. अगर Edge यूज़र इंटरफ़ेस (यूआई) में शर्त तय करते समय > का इस्तेमाल किया जाता है, तो वह > में बदल जाता है. |
>= या >= |
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" या "F" (फ़्लोट, उदाहरण के लिए, 3.142f, 91.1F)
- "d" या "D" (डबल, उदाहरण के लिए, 3.142d, 100.123D)
- "l" या "L" (लंबा, उदाहरण के लिए, 12321421312L)
ऐसे मामलों में, सिस्टम इस टेबल में दिखाए गए मुताबिक काम करता है (जहां आरएचएस, समीकरण के दाईं ओर और एलएचएस बाईं ओर है):
आरएचएस एलएचएस | बूलियन | पूर्णांक | ज़्यादा समय के लिए | Float | डबल-साइज़ बेड | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | ऑब्जेक्ट |
---|---|---|---|---|---|---|---|---|
बूलियन | बूलियन | पूर्णांक | ज़्यादा समय के लिए | Float | डबल-साइज़ बेड | स्ट्रिंग | - | |
पूर्णांक | पूर्णांक | पूर्णांक | ज़्यादा समय के लिए | Float | डबल-साइज़ बेड | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
ज़्यादा समय के लिए | ज़्यादा समय के लिए | ज़्यादा समय के लिए | ज़्यादा समय के लिए | Float | डबल-साइज़ बेड | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
Float | Float | Float | Float | Float | डबल-साइज़ बेड | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
डबल-साइज़ बेड | डबल-साइज़ बेड | डबल-साइज़ बेड | डबल-साइज़ बेड | डबल-साइज़ बेड | डबल-साइज़ बेड | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | स्ट्रिंग | दूसरे कैंपेन से तुलना की जा सकती है | - |
दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | दूसरे कैंपेन से तुलना की जा सकती है | - |
ऑब्जेक्ट | - | - | - | - | - | - | - | - |
शून्य ऑपरेंड
इस टेबल में दिखाया गया है कि दिखाए गए ऑपरेंड की बाईं ओर (एलएचएस) और/या दाईं ओर (आरएचएस) वैल्यू उपलब्ध न होने पर, शर्तें true
या false
पर वैल्यू होती हैं या नहीं:
ऑपरेटर | बाईं ओर मौजूद शून्य | RHS शून्य | बाईं ओर मौजूद सेल और आरएचएस शून्य |
---|---|---|---|
= , == , := |
false | false | true |
=| |
false | false | false |
!= |
true | true | false |
> या > |
true | false | false |
>= या >= |
false | true | true |
< |
true | false | false |
<= |
true | false | true |
~ |
false | लागू नहीं | false |
~~ |
false | लागू नहीं | false |
!~ |
true | false | false |
~/ |
false | लागू नहीं | 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>