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

आपको 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 पर प्रीफ़्लो और पोस्टफ़्लो (अनुरोध और जवाब, दोनों) हर ट्रांजै़क्शन के लिए लागू होते हैं. इसलिए, ये बिना किसी शर्त के 'फ़ेलसेफ़' सुविधाएं देते हैं.

उदाहरण के लिए, अनुरोध के एचटीटीपी वर्ब के आधार पर, शर्त के साथ अनुरोध करने का फ़्लो और गड़बड़ी दिखाने वाले (संभावित) एचटीटीपी स्टेटस कोड के आधार पर, शर्त के साथ जवाब देने का फ़्लो लागू करने के लिए:

<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 precedence का इस्तेमाल किया जाता है.
  • Apigee Edge, java.util.regex में लागू किए गए रेगुलर एक्सप्रेशन पर निर्भर करता है.

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

चिह्न Word ब्यौरा
! Not, not यूनरी ऑपरेटर (एक इनपुट लेता है)
= Equals, Is इसके बराबर है (केस सेंसिटिव)
!= NotEquals, IsNot इसके बराबर नहीं है (केस सेंसिटिव)
:= EqualsCaseInsensitive इसके बराबर है, लेकिन केस-इनसेंसिटिव है
> या &gt; GreaterThan इससे ज़्यादा. Edge यूज़र इंटरफ़ेस में शर्त तय करते समय > का इस्तेमाल करने पर, इसे &gt; में बदल दिया जाता है.
>= या &gt;= GreaterThanOrEquals इससे ज़्यादा या इसके बराबर. Edge UI में शर्त तय करते समय >= का इस्तेमाल करने पर, इसे &gt;= में बदल दिया जाता है.
&lt; LesserThan इससे कम. Edge यूज़र इंटरफ़ेस (यूआई), < को स्वीकार नहीं करता.
&lt;= LesserThanOrEquals इससे कम या इसके बराबर. Edge यूज़र इंटरफ़ेस (यूआई), <= लिटरल के साथ काम नहीं करता.
&& And, and और
|| 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)

इन मामलों में, सिस्टम यहां दी गई टेबल में दिखाए गए बदलाव करता है. इसमें आरएचएस का मतलब समीकरण के दाईं ओर और एलएचएस का मतलब बाईं ओर है:

आरएचएस एलएचएस बूलियन पूर्णांक लंबा फ़्लोट डबल स्ट्रिंग दूसरे कैंपेन से तुलना की जा सकती है ऑब्जेक्ट
बूलियन बूलियन पूर्णांक लंबा फ़्लोट डबल स्ट्रिंग -
पूर्णांक पूर्णांक पूर्णांक लंबा फ़्लोट डबल स्ट्रिंग दूसरे कैंपेन से तुलना की जा सकती है -
लंबा लंबा लंबा लंबा फ़्लोट डबल स्ट्रिंग दूसरे कैंपेन से तुलना की जा सकती है -
फ़्लोट फ़्लोट फ़्लोट फ़्लोट फ़्लोट डबल स्ट्रिंग दूसरे कैंपेन से तुलना की जा सकती है -
डबल डबल डबल डबल डबल डबल स्ट्रिंग दूसरे कैंपेन से तुलना की जा सकती है -
स्ट्रिंग स्ट्रिंग स्ट्रिंग स्ट्रिंग स्ट्रिंग स्ट्रिंग स्ट्रिंग दूसरे कैंपेन से तुलना की जा सकती है -
दूसरे कैंपेन से तुलना की जा सकती है दूसरे कैंपेन से तुलना की जा सकती है दूसरे कैंपेन से तुलना की जा सकती है दूसरे कैंपेन से तुलना की जा सकती है दूसरे कैंपेन से तुलना की जा सकती है दूसरे कैंपेन से तुलना की जा सकती है दूसरे कैंपेन से तुलना की जा सकती है दूसरे कैंपेन से तुलना की जा सकती है -
ऑब्जेक्ट - - - - - - - -

शून्य ऑपरेंड

नीचे दी गई टेबल में दिखाया गया है कि जब ऑपरेंड की बाईं ओर (एलएचएस) और/या दाईं ओर (आरएचएस) की वैल्यू शून्य होती हैं, तब शर्तें true या false के तौर पर आंकी जाती हैं:

ऑपरेटर LHS null आरएचएस शून्य है एलएचएस और आरएचएस की वैल्यू शून्य है
=, ==, := 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>