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

आपको 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.

वैरिएबल

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

ऑपरेटर

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

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

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

चिह्न Word ब्यौरा
! Not, not यूनरी ऑपरेटर (एक इनपुट लेता है)
= Equals, Is इसके बराबर है (केस-सेंसिटिव)
!= NotEquals, IsNot इसके बराबर नहीं है (केस-सेंसिटिव)
:= EqualsCaseInsensitive बराबर है, लेकिन केस-इनसेंसिटिव है
> या &gt; GreaterThan इससे ज़्यादा. अगर आप > एज यूज़र इंटरफ़ेस (यूआई) में शर्त तय करते समय, यह &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" (उदाहरण के लिए, फ़्लोट 3.142f, 91.1F)
  • "d" या "D" (डबल, उदाहरण के लिए, 3.142d, 100.123D)
  • "एल" या "L" (लॉन्ग, उदाहरण के लिए, 12321421312L)

ऐसे मामलों में, सिस्टम नीचे दी गई टेबल में दिखाए गए बदलावों के मुताबिक काम करता है (जहां RHS का मतलब है समीकरण के दाईं ओर और LHS बाईं ओर है):

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

शून्य ऑपरेंड

इस टेबल से पता चलता है कि शर्तों का मूल्यांकन करने पर true या बाईं ओर (LHS) और/या दाईं ओर (RHS) में मान शून्य होने पर false ऑपरेंड को दिखाया गया है:

ऑपरेटर बाईं ओर मौजूद शून्य RHS शून्य बाईं और दाईं ओर मौजूद खाली जगह
=, ==, := गलत गलत true
=| गलत गलत गलत
!= true true गलत
> या &gt; true गलत गलत
>= या &gt;= गलत true true
&lt; true गलत गलत
&lt;= 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>