शर्तों का रेफ़रंस

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 से नहीं.

वैरिएबल

कंडिशनल स्टेटमेंट में, बिल्ट-इन फ़्लो वैरिएबल और कस्टम वैरिएबल, दोनों का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, ये देखें:

ऑपरेटर

ऑपरेटर का इस्तेमाल करते समय, इन पाबंदियों का ध्यान रखें:

  • ऑपरेटर का इस्तेमाल, वैरिएबल के नाम के तौर पर नहीं किया जा सकता.
  • ऑपरेटर के पहले और बाद में स्पेस वर्ण डालना ज़रूरी है.
  • किसी वैरिएबल में ऑपरेटर को शामिल करने के लिए, वैरिएबल का नाम सिंगल कोट में होना चाहिए. उदाहरण के लिए, 'request.header.help!me'.
  • अंकगणितीय ऑपरेटर (+ * - / %) समर्थित नहीं हैं.
  • Java प्राथमिकता का इस्तेमाल ऑपरेटर के लिए किया जाता है.
  • Apigee Edge, java.util.regex में लागू किए गए रेगुलर एक्सप्रेशन पर निर्भर करता है.

यहां दी गई टेबल में, इस्तेमाल किए जा सकने वाले ऑपरेटर की सूची दी गई है. आप अपने एक्सप्रेशन में चिह्न या शब्द का इस्तेमाल कर सकते हैं:

चिह्न शब्द ब्यौरा
! Not, not यूनरी ऑपरेटर (एक इनपुट लेता है)
= Equals, Is इसके बराबर है (केस-सेंसिटिव)
!= NotEquals, IsNot इसके बराबर नहीं है (केस-सेंसिटिव)
:= EqualsCaseInsensitive बराबर है, लेकिन केस-इनसेंसिटिव है
> या &gt; GreaterThan इससे बड़ा है. अगर Edge यूज़र इंटरफ़ेस (यूआई) में शर्त तय करते समय > का इस्तेमाल किया जाता है, तो वह &gt; में बदल जाता है.
>= या &gt;= GreaterThanOrEquals इससे ज़्यादा या इसके बराबर. अगर आप Edge के यूज़र इंटरफ़ेस (यूआई) में शर्त तय करते समय >= का इस्तेमाल करते हैं, तो यह &gt;= में बदल जाता है.
&lt; LesserThan इससे छोटा. Edge यूज़र इंटरफ़ेस (यूआई) लिटरल वैल्यू < के साथ काम नहीं करता.
&lt;= LesserThanOrEquals इससे कम या इसके बराबर. EDGE यूज़र इंटरफ़ेस (यूआई) में लिटरल <= काम नहीं करता.
&& And, and और
|| Or Or ऑपरेटर केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) नहीं है. उदाहरण के लिए, OR, Or, और or सभी मान्य हैं.
() एक्सप्रेशन को ग्रुप करता है. (, एक्सप्रेशन को खोलता है और ) इसे बंद कर देता है.
~~ JavaRegex

javax.util.regex के साथ काम करने वाले रेगुलर एक्सप्रेशन से मेल खाता है. मैच केस-सेंसिटिव होता है. उदाहरण के लिए, कंडिशनल स्टेटमेंट में पैटर्न मैच करना देखें.

~ 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
> या &gt; true false false
>= या &gt;= false true true
&lt; true false false
&lt;= 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>