एपीआई प्रॉक्सी कॉन्फ़िगरेशन के बारे में जानकारी

Apigee Edge के दस्तावेज़ देखे जा रहे हैं.
Apigee X के दस्तावेज़ पर जाएं.
जानकारी

Apigee Edge का इस्तेमाल करने वाले डेवलपर के तौर पर, आपकी मुख्य डेवलपमेंट गतिविधियों में एपीआई प्रॉक्सी कॉन्फ़िगर करना शामिल है. ये एपीआई प्रॉक्सी, एपीआई या बैकएंड सेवाओं के लिए प्रॉक्सी के तौर पर काम करती हैं. इस दस्तावेज़ में, एपीआई प्रॉक्सी बनाते समय उपलब्ध सभी कॉन्फ़िगरेशन एलिमेंट के बारे में जानकारी दी गई है.

अगर आपको एपीआई प्रॉक्सी बनाने का तरीका सीखना है, तो हमारा सुझाव है कि आप एक सामान्य एपीआई प्रॉक्सी बनाएं विषय से शुरुआत करें.

प्रॉक्सी कॉन्फ़िगरेशन में बदलाव करने के सबसे सामान्य तरीके ये हैं:

प्रॉक्सी कॉन्फ़िगरेशन का लोकल डेवलपमेंट

अपने प्रॉक्सी कॉन्फ़िगरेशन डाउनलोड किए जा सकते हैं, ताकि उन्हें लोकल मशीन पर बदला जा सके. जब आपका काम पूरा हो जाए, तब नतीजों को Edge पर अपलोड करें. इस तरीके से, प्रॉक्सी कॉन्फ़िगरेशन को सोर्स कंट्रोल, वर्शनिंग, और शेयर किए गए अन्य वर्कफ़्लो में इंटिग्रेट किया जा सकता है. इसके अलावा, प्रॉक्सी कॉन्फ़िगरेशन पर स्थानीय तौर पर काम करके, अपने एक्सएमएल एडिटर और पुष्टि करने वाले टूल का इस्तेमाल किया जा सकता है.

इस सेक्शन में, यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, मौजूदा प्रॉक्सी कॉन्फ़िगरेशन डाउनलोड करने, उसमें बदलाव करने, और फिर उसे Edge पर वापस अपलोड करने का तरीका बताया गया है, ताकि उसे डिप्लॉय किया जा सके. apigeetool का इस्तेमाल करके भी, नया प्रॉक्सी कॉन्फ़िगरेशन डाउनलोड और डिप्लॉय किया जा सकता है. इसके लिए, fetchproxy और deployproxy कमांड का इस्तेमाल करें.

यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, प्रॉक्सी कॉन्फ़िगरेशन में स्थानीय तौर पर बदलाव करने के लिए:

  1. Edge यूआई में, मौजूदा प्रॉक्सी कॉन्फ़िगरेशन डाउनलोड करें. (एपीआई प्रॉक्सी व्यू में, प्रोजेक्ट > डाउनलोड रिवीजन चुनें.)
  2. अपनी लोकल मशीन पर, एक नई डायरेक्ट्री बनाएं और डाउनलोड की गई ZIP फ़ाइल को उसमें एक्सट्रैक्ट करें.

    ZIP फ़ाइल को बड़ा करने के लिए, unzip जैसे किसी यूटिलिटी का इस्तेमाल किया जा सकता है. इसका उदाहरण यहां दिया गया है:

    mkdir myappdir
    unzip ./my-app_app_rev3_2019_04_20.zip -d myappdir

    ZIP फ़ाइल के कॉन्टेंट का स्ट्रक्चर, एपीआई प्रॉक्सी स्ट्रक्चर में बताए गए स्ट्रक्चर जैसा होना चाहिए.

  3. सोर्स फ़ाइलों में ज़रूरत के मुताबिक बदलाव करें. प्रॉक्सी कॉन्फ़िगरेशन में मौजूद सोर्स फ़ाइलों के बारे में जानने के लिए, एपीआई प्रॉक्सी की कॉन्फ़िगरेशन फ़ाइलें और डायरेक्ट्री स्ट्रक्चर लेख पढ़ें.

    उदाहरण के लिए, अपनी एपीआई प्रॉक्सी में सेहत की निगरानी की सुविधा चालू करने के लिए, /apiproxy/targets/ डायरेक्ट्री में TargetEndpoint कॉन्फ़िगरेशन फ़ाइल में बदलाव करें. इस डायरेक्ट्री में डिफ़ॉल्ट फ़ाइल default.xml है. हालांकि, अगर सशर्त टारगेट का इस्तेमाल किया जाता है, तो अलग-अलग नामों वाली फ़ाइलें हो सकती हैं.

    इस मामले में, अगर TargetEndpoint कॉन्फ़िगरेशन फ़ाइल और उसकी डायरेक्ट्री मौजूद नहीं है, तो उन्हें बनाएं.

  4. प्रॉक्सी कॉन्फ़िगरेशन फ़ाइलों में बदलाव करने के बाद, अपने बदलावों को सेव करना न भूलें.
  5. उस नई डायरेक्ट्री पर जाएं जिसे आपने ज़िप फ़ाइलों को अनज़िप करते समय बनाया था. यह डायरेक्ट्री, अनज़िप की गई कॉन्फ़िगरेशन फ़ाइलों का रूट होती है.

    उदाहरण के लिए, अगर आपने फ़ाइलों को /myappdir डायरेक्ट्री में अनपैक किया है, तो उस डायरेक्ट्री में जाएं. यहां दिए गए उदाहरण में ऐसा करने का तरीका बताया गया है:

    cd myappdir

    आपको अपनी प्रॉक्सी कॉन्फ़िगरेशन फ़ाइलों को फिर से संग्रहित करने से पहले, इस डायरेक्ट्री पर स्विच करना चाहिए. ऐसा इसलिए, क्योंकि आपको /myappdir डायरेक्ट्री को ZIP फ़ाइल में शामिल नहीं करना है. ZIP फ़ाइल में सबसे ऊपर वाली डायरेक्ट्री /apiproxy होनी चाहिए.

  6. नई या बदली गई फ़ाइलों के साथ-साथ, प्रॉक्सी कॉन्फ़िगरेशन फ़ाइलों को फिर से संग्रहित करें. zip जैसी किसी यूटिलिटी का इस्तेमाल किया जा सकता है. इसका उदाहरण यहां दिया गया है:
    zip my-new-proxy.zip -r .

    ZIP फ़ाइल में सबसे ऊपर वाली डायरेक्ट्री /apiproxy होनी चाहिए.

    ZIP फ़ाइल के नाम के लिए कोई खास ज़रूरी शर्तें नहीं हैं. उदाहरण के लिए, आपको फ़ाइल के नाम में संशोधन संख्या बढ़ाने या तारीख तय करने की ज़रूरत नहीं है. हालांकि, ऐसा करने से डीबग करने या सोर्स कंट्रोल करने में मदद मिल सकती है.

    Edge, नए प्रॉक्सी कॉन्फ़िगरेशन का वर्शन नंबर अपने-आप बढ़ा देता है. ऐसा तब होता है, जब आप इसे अपलोड करते हैं.

  7. Edge के यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, नया प्रॉक्सी कॉन्फ़िगरेशन अपलोड करें. (एपीआई प्रॉक्सी व्यू में, प्रोजेक्ट > नया वर्शन अपलोड करें को चुनें.)

    अगर आपको Bundle is invalid. Empty bundle. जैसी कोई गड़बड़ी मिलती है, तो पक्का करें कि आपकी ZIP फ़ाइल की टॉप-लेवल डायरेक्ट्री /apiproxy हो. अगर ऐसा नहीं है, तो रूट डायरेक्ट्री से अपनी प्रॉक्सी कॉन्फ़िगरेशन फ़ाइलों को फिर से संग्रहित करें.

    नया प्रॉक्सी कॉन्फ़िगरेशन अपलोड करने के बाद, Edge, वर्शन नंबर को बढ़ा देता है और उसे बदलाव की खास जानकारी व्यू में दिखाता है.

    यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके अपलोड करने के बाद, Edge आपके लिए नए वर्शन को डिप्लॉय नहीं करता.

  8. अपने नए वर्शन को डिप्लॉय करें.

ज़्यादा जानकारी के लिए, Apigee Community में ट्यूटोरियल: यूज़र इंटरफ़ेस (यूआई) और मैनेजमेंट एपीआई का इस्तेमाल करके प्रॉक्सी डाउनलोड करने का तरीका देखें.

एपीआई प्रॉक्सी का स्ट्रक्चर

एपीआई प्रॉक्सी में यह कॉन्फ़िगरेशन होता है:

बुनियादी कॉन्फ़िगरेशन किसी एपीआई प्रॉक्सी के लिए कॉन्फ़िगरेशन की मुख्य सेटिंग. बेस कॉन्फ़िगरेशन देखें.
ProxyEndpoint कॉन्फ़िगरेशन इनबाउंड एचटीटीपी कनेक्शन (अनुरोध करने वाले ऐप्लिकेशन से Apigee Edge तक), अनुरोध और जवाब के फ़्लो, और नीति अटैचमेंट के लिए सेटिंग. ProxyEndpoint देखें.
TargetEndpoint कॉन्फ़िगरेशन Apigee Edge से बैकएंड सेवा तक जाने वाले आउटबाउंड एचटीटीपी कनेक्शन, अनुरोध और जवाब के फ़्लो, और नीति अटैचमेंट के लिए सेटिंग. TargetEndpoint देखें.
फ़्लो ProxyEndpoint और TargetEndpoint के अनुरोध और जवाब की पाइपलाइन, जिनसे नीतियां जोड़ी जा सकती हैं. फ़्लो देखें.
नीतियां एक्सएमएल फ़ॉर्मैट में कॉन्फ़िगरेशन फ़ाइलें, जो Apigee Edge की नीति के स्कीमा के मुताबिक हों. नीतियां देखें.
संसाधन कस्टम लॉजिक को लागू करने के लिए, नीतियों में जिन स्क्रिप्ट, JAR फ़ाइलों, और XSLT फ़ाइलों का रेफ़रंस दिया गया है. संसाधन देखें.

एपीआई प्रॉक्सी डायरेक्ट्री का स्ट्रक्चर और कॉन्टेंट

ऊपर दी गई टेबल में मौजूद कॉम्पोनेंट, यहां दिए गए डायरेक्ट्री स्ट्रक्चर में मौजूद कॉन्फ़िगरेशन फ़ाइलों से तय होते हैं:

यह डायरेक्ट्री स्ट्रक्चर दिखाता है, जिसमें apiproxy रूट होता है. apiproxy डायरेक्ट्री के ठीक नीचे, नीतियां, प्रॉक्सी, संसाधन, और टारगेट डायरेक्ट्री होती हैं. साथ ही, weatherapi.xml फ़ाइल भी होती है.

एपीआई प्रॉक्सी की कॉन्फ़िगरेशन फ़ाइलें और डायरेक्ट्री स्ट्रक्चर

इस सेक्शन में, एपीआई प्रॉक्सी की कॉन्फ़िगरेशन फ़ाइलों और डायरेक्ट्री स्ट्रक्चर के बारे में बताया गया है.

बेस कॉन्फ़िगरेशन

/apiproxy/weatherapi.xml

यह एपीआई प्रॉक्सी का बुनियादी कॉन्फ़िगरेशन होता है. इससे एपीआई प्रॉक्सी का नाम तय होता है. नाम, संगठन में यूनीक होना चाहिए.

कॉन्फ़िगरेशन का उदाहरण:

<APIProxy name="weatherapi">
</APIProxy>

बेस कॉन्फ़िगरेशन एलिमेंट

नाम ब्यौरा डिफ़ॉल्ट ज़रूरी है?
APIProxy
name एपीआई प्रॉक्सी का नाम. यह नाम, किसी संगठन के लिए यूनीक होना चाहिए. नाम में सिर्फ़ इन वर्णों का इस्तेमाल किया जा सकता है: A-Za-z0-9_- लागू नहीं हां
revision एपीआई प्रॉक्सी कॉन्फ़िगरेशन का संशोधन नंबर. आपको वर्शन नंबर सेट करने की ज़रूरत नहीं है, क्योंकि Apigee Edge, एपीआई प्रॉक्सी के मौजूदा वर्शन को अपने-आप ट्रैक करता है. लागू नहीं नहीं
ConfigurationVersion एपीआई प्रॉक्सी कॉन्फ़िगरेशन स्कीमा का वह वर्शन जिसका यह एपीआई प्रॉक्सी पालन करता है. फ़िलहाल, सिर्फ़ majorVersion 4 और minorVersion 0 का इस्तेमाल किया जा सकता है. इस सेटिंग का इस्तेमाल आने वाले समय में, एपीआई प्रॉक्सी फ़ॉर्मैट को बेहतर बनाने के लिए किया जा सकता है. 4.0 नहीं
Description एपीआई प्रॉक्सी के बारे में टेक्स्ट में दी गई जानकारी. ब्यौरा देने पर, वह Edge मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) में दिखेगा. लागू नहीं नहीं
DisplayName यह ऐसा नाम होता है जिसे आसानी से समझा जा सकता है. यह एपीआई प्रॉक्सी कॉन्फ़िगरेशन के name एट्रिब्यूट से अलग हो सकता है. लागू नहीं नहीं
Policies इस एपीआई प्रॉक्सी की /policies डायरेक्ट्री में मौजूद नीतियों की सूची. आम तौर पर, आपको यह एलिमेंट सिर्फ़ तब दिखेगा, जब Edge Management UI का इस्तेमाल करके एपीआई प्रॉक्सी बनाई गई हो. यह सिर्फ़ एक 'मेनिफ़ेस्ट' सेटिंग है. इसे एपीआई प्रॉक्सी के कॉन्टेंट को दिखाने के लिए डिज़ाइन किया गया है. लागू नहीं नहीं
ProxyEndpoints इस एपीआई प्रॉक्सी की /proxies डायरेक्ट्री में ProxyEndpoints की सूची. आम तौर पर, आपको यह एलिमेंट सिर्फ़ तब दिखेगा, जब एपीआई प्रॉक्सी को Edge मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके बनाया गया हो. यह सिर्फ़ एक 'मेनिफ़ेस्ट' सेटिंग है. इसे एपीआई प्रॉक्सी के कॉन्टेंट को दिखाने के लिए डिज़ाइन किया गया है. लागू नहीं नहीं
Resources इस एपीआई प्रॉक्सी की /resources डायरेक्ट्री में मौजूद रिसॉर्स (JavaScript, Python, Java, XSLT) की सूची. आम तौर पर, यह एलिमेंट सिर्फ़ तब दिखता है, जब Edge मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके एपीआई प्रॉक्सी बनाई गई हो. यह सिर्फ़ 'मेनिफ़ेस्ट' सेटिंग है. इसे एपीआई प्रॉक्सी के कॉन्टेंट को दिखाने के लिए डिज़ाइन किया गया है. लागू नहीं नहीं
Spec यह उस OpenAPI स्पेसिफ़िकेशन की पहचान करता है जो एपीआई प्रॉक्सी से जुड़ा है. वैल्यू को यूआरएल या स्पेसिफ़िकेशन स्टोर में मौजूद पाथ पर सेट किया जाता है.

ध्यान दें: स्पेसिफ़िकेशन स्टोर सिर्फ़ New Edge के अनुभव में उपलब्ध है. स्पेसिफ़िकेशन स्टोर के बारे में ज़्यादा जानकारी के लिए, स्पेसिफ़िकेशन मैनेज करना और शेयर करना लेख पढ़ें.
लागू नहीं नहीं
TargetServers इस एपीआई प्रॉक्सी के किसी भी TargetEndpoint में रेफ़र किए गए TargetServer की सूची. आम तौर पर, आपको यह एलिमेंट सिर्फ़ तब दिखेगा, जब Edge Management UI का इस्तेमाल करके एपीआई प्रॉक्सी बनाई गई हो. यह सिर्फ़ एक 'मेनिफ़ेस्ट' सेटिंग है. इसे एपीआई प्रॉक्सी के कॉन्टेंट को दिखाने के लिए डिज़ाइन किया गया है. लागू नहीं नहीं
TargetEndpoints इस एपीआई प्रॉक्सी की /targets डायरेक्ट्री में TargetEndpoints की सूची. आम तौर पर, आपको यह एलिमेंट सिर्फ़ तब दिखेगा, जब एपीआई प्रॉक्सी को Edge मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके बनाया गया हो. यह सिर्फ़ एक 'मेनिफ़ेस्ट' सेटिंग है. इसे एपीआई प्रॉक्सी के कॉन्टेंट को दिखाने के लिए डिज़ाइन किया गया है. लागू नहीं नहीं

ProxyEndpoint

नीचे दी गई इमेज में, अनुरोध/जवाब का फ़्लो दिखाया गया है:

इस इमेज में, क्लाइंट को एचटीटीपी सेवा को कॉल करते हुए दिखाया गया है. अनुरोध, एचटीटीपी सेवा से प्रोसेस होने से पहले, प्रॉक्सी एंडपॉइंट और फिर टारगेट एंडपॉइंट से होकर जाता है. जवाब, क्लाइंट को वापस भेजने से पहले टारगेट एंडपॉइंट और फिर प्रॉक्सी एंडपॉइंट से होकर जाता है.

/apiproxy/proxies/default.xml

ProxyEndpoint कॉन्फ़िगरेशन, एपीआई प्रॉक्सी के लिए इनबाउंड (क्लाइंट के लिए उपलब्ध) इंटरफ़ेस तय करता है. ProxyEndpoint को कॉन्फ़िगर करने का मतलब है कि आपने एक नेटवर्क कॉन्फ़िगरेशन सेट अप किया है. इससे यह तय होता है कि क्लाइंट ऐप्लिकेशन ('ऐप्लिकेशन') को प्रॉक्सी किए गए एपीआई को कैसे शुरू करना चाहिए.

नीचे दिए गए ProxyEndpoint कॉन्फ़िगरेशन का सैंपल, /apiproxy/proxies में सेव किया जाएगा:

<ProxyEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPProxyConnection>
    <BasePath>/weather</BasePath>
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

बुनियादी ProxyEndpoint में, कॉन्फ़िगरेशन के ये ज़रूरी एलिमेंट होते हैं:

ProxyEndpoint कॉन्फ़िगरेशन एलिमेंट

नाम ब्यौरा डिफ़ॉल्ट ज़रूरी है?
ProxyEndpoint
name ProxyEndpoint का नाम. जब (कुछ मामलों में) एक से ज़्यादा ProxyEndpoint तय किए जाते हैं, तब एपीआई प्रॉक्सी कॉन्फ़िगरेशन में यह यूनीक होना चाहिए. नाम में सिर्फ़ इन वर्णों का इस्तेमाल किया जा सकता है: A-Za-z0-9._\-$ %. लागू नहीं हां
PreFlow यह अनुरोध या जवाब के PreFlow फ़्लो में नीतियों को तय करता है. लागू नहीं हां
Flows
इससे अनुरोध या जवाब के कंडीशनल फ़्लो में नीतियों के बारे में पता चलता है.
लागू नहीं हां
PostFlow
यह अनुरोध या जवाब के PostFlow फ़्लो में नीतियों को तय करता है.
लागू नहीं हां
HTTPProxyConnection एपीआई प्रॉक्सी से जुड़े नेटवर्क पते और यूआरआई पाथ के बारे में बताता है
BasePath

यह एक ज़रूरी स्ट्रिंग है. यह यूआरआई पाथ की खास तौर पर पहचान करती है. इसका इस्तेमाल Apigee Edge, आने वाले मैसेज को सही एपीआई प्रॉक्सी पर रूट करने के लिए करता है.

BasePath, यूआरआई फ़्रैगमेंट होता है. उदाहरण के लिए, /weather. इसे एपीआई प्रॉक्सी के बेस यूआरएल में जोड़ा जाता है. उदाहरण के लिए, http://apifactory-test.apigee.net. BasePath, किसी एनवायरमेंट में यूनीक होना चाहिए. एपीआई प्रॉक्सी जनरेट या इंपोर्ट करते समय, यूनीकनेस की पुष्टि की जाती है.

बेस पाथ में वाइल्डकार्ड का इस्तेमाल करना

एपीआई प्रॉक्सी के बेस पाथ में, एक या उससे ज़्यादा "*" वाइल्डकार्ड का इस्तेमाल किया जा सकता है. उदाहरण के लिए, /team/*/members का बेस पाथ, क्लाइंट को https://[host]/team/blue/members और https://[host]/team/green/members को कॉल करने की अनुमति देता है. इसके लिए, आपको नई टीमों के साथ काम करने के लिए, नई एपीआई प्रॉक्सी बनाने की ज़रूरत नहीं होती. ध्यान दें कि /**/ का इस्तेमाल नहीं किया जा सकता.

अहम जानकारी: Apigee, वाइल्डकार्ड "*" को बेस पाथ के पहले एलिमेंट के तौर पर इस्तेमाल करने की अनुमति नहीं देता. उदाहरण के लिए, इसका इस्तेमाल नहीं किया जा सकता: /*/search. बेस पाथ को "*" से शुरू करने पर, अनचाही गड़बड़ियां हो सकती हैं. ऐसा इसलिए होता है, क्योंकि Edge मान्य पाथ की पहचान करने के लिए एक खास तरीके का इस्तेमाल करता है.

/ हां
VirtualHost

यह एपीआई प्रॉक्सी को किसी एनवायरमेंट के लिए, खास बेस यूआरएल से जोड़ता है. वर्चुअल होस्ट, नाम वाला कॉन्फ़िगरेशन होता है. यह किसी एनवायरमेंट के लिए एक या उससे ज़्यादा यूआरएल तय करता है.

ProxyEndpoint के लिए तय किए गए वर्चुअल होस्ट के नाम से यह तय होता है कि एपीआई प्रॉक्सी किन डोमेन और पोर्ट पर दिखेगी. साथ ही, इससे यह भी तय होता है कि ऐप्लिकेशन, एपीआई प्रॉक्सी को कॉल करने के लिए किस यूआरएल का इस्तेमाल करेंगे.

डिफ़ॉल्ट रूप से, किसी एनवायरमेंट के लिए दो वर्चुअल होस्ट तय किए जाते हैं: default और secure. कोई संगठन कस्टम डोमेन भी तय कर सकता है. यह पक्का करने के लिए कि एपीआई प्रॉक्सी सिर्फ़ एचटीटीपीएस पर उपलब्ध हो, उदाहरण के लिए, HTTPProxyConnection में VirtualHost को secure पर सेट करें.

डिफ़ॉल्ट नहीं
Properties एचटीटीपी कॉन्फ़िगरेशन की कुछ सेटिंग को <ProxyEndpoint> की प्रॉपर्टी के तौर पर तय किया जा सकता है. लागू नहीं नहीं
FaultRules
इससे यह तय होता है कि गड़बड़ी होने पर ProxyEndpoint कैसे काम करेगा. गड़बड़ी के नियम में दो आइटम शामिल होते हैं:
  • ऐसी शर्त जो पहले से तय की गई कैटगरी, सबकैटगरी या गड़बड़ी के नाम के आधार पर, ठीक की जाने वाली गड़बड़ी के बारे में बताती है
  • एक या उससे ज़्यादा ऐसी नीतियां जो किसी शर्त के लिए, गड़बड़ी के नियम के व्यवहार को तय करती हैं

गड़बड़ियों को ठीक करना लेख पढ़ें.

लागू नहीं नहीं
DefaultFaultRule

यह उन सभी गड़बड़ियों (सिस्टम, ट्रांसपोर्ट, मैसेज या नीति) को ठीक करता है जिन्हें किसी अन्य गड़बड़ी के नियम के तहत ठीक नहीं किया जाता.

गड़बड़ियों को ठीक करना लेख पढ़ें.

लागू नहीं नहीं
RouteRule यह ProxyEndpoint की अनुरोध पाइपलाइन से प्रोसेस होने के बाद, आने वाले अनुरोधों के मैसेज के डेस्टिनेशन के बारे में बताता है. आम तौर पर, RouteRule, TargetEndpoint के नाम वाले कॉन्फ़िगरेशन की ओर इशारा करता है. हालांकि, यह सीधे तौर पर किसी यूआरएल की ओर भी इशारा कर सकता है.
Name यह ज़रूरी एट्रिब्यूट है. इससे RouteRule का नाम मिलता है. नाम में सिर्फ़ इन वर्णों का इस्तेमाल किया जा सकता है: A-Za-z0-9._\-$ %. उदाहरण के लिए, Cat2 %_ एक कानूनी नाम है. लागू नहीं हां
Condition यह एक वैकल्पिक कंडिशनल स्टेटमेंट है. इसका इस्तेमाल रनटाइम के दौरान डाइनैमिक राउटिंग के लिए किया जाता है. शर्त के साथ लागू होने वाले RouteRules काम के होते हैं. उदाहरण के लिए, इनका इस्तेमाल कॉन्टेंट के आधार पर राउटिंग की सुविधा चालू करने के लिए किया जा सकता है, ताकि बैकएंड वर्शनिंग की सुविधा काम कर सके. लागू नहीं नहीं
TargetEndpoint

यह एक वैकल्पिक स्ट्रिंग है, जो नाम वाले TargetEndpoint कॉन्फ़िगरेशन की पहचान करती है. नाम वाला TargetEndpoint, उसी एपीआई प्रॉक्सी में /targets डायरेक्ट्री के तहत तय किया गया कोई भी TargetEndpoint होता है.

TargetEndpoint का नाम तय करके, यह तय किया जाता है कि ProxyEndpoint अनुरोध पाइपलाइन से प्रोसेस होने के बाद, अनुरोध मैसेज कहां फ़ॉरवर्ड किए जाने चाहिए. ध्यान दें कि यह सेटिंग इस्तेमाल करना ज़रूरी नहीं है.

ProxyEndpoint, किसी यूआरएल को सीधे तौर पर कॉल कर सकता है. उदाहरण के लिए, एचटीटीपी क्लाइंट के तौर पर काम करने वाला JavaScript या Java संसाधन, TargetEndpoint की बुनियादी ज़िम्मेदारी निभा सकता है. यह ज़िम्मेदारी, अनुरोधों को बैकएंड सेवा पर फ़ॉरवर्ड करना है.

लागू नहीं नहीं
URL यह एक वैकल्पिक स्ट्रिंग है. यह आउटबाउंड नेटवर्क पते को तय करती है. इसे ProxyEndpoint कॉल करता है. यह TargetEndpoint के उन कॉन्फ़िगरेशन को बायपास करता है जो /targets में सेव किए जा सकते हैं लागू नहीं नहीं

RouteRules को कॉन्फ़िगर करने का तरीका

नाम वाला TargetEndpoint, /apiproxy/targets में मौजूद कॉन्फ़िगरेशन फ़ाइल को रेफ़र करता है. ProxyEndpoint से प्रोसेस करने के बाद, RouteRule इस फ़ाइल को अनुरोध फ़ॉरवर्ड करता है.

उदाहरण के लिए, यहां दिया गया RouteRule, /apiproxy/targets/myTarget.xml कॉन्फ़िगरेशन के बारे में बताता है:

<RouteRule name="default">
  <TargetEndpoint>myTarget</TargetEndpoint>
</RouteRule>

यूआरएल को सीधे तौर पर कॉल करना

ProxyEndpoint, सीधे तौर पर बैकएंड सेवा को भी चालू कर सकता है. यूआरएल को सीधे तौर पर इनवोक करने से, /apiproxy/targets में मौजूद TargetEndpoints कॉन्फ़िगरेशन को बायपास किया जाता है. इस वजह से, TargetEndpoint एक वैकल्पिक एपीआई प्रॉक्सी कॉन्फ़िगरेशन है. हालांकि, व्यवहार में ProxyEndpoint से सीधे तौर पर इनवोक करने का सुझाव नहीं दिया जाता है.

उदाहरण के लिए, यहां दी गई RouteRule, http://api.mycompany.com/v2 को एक एचटीटीपी कॉल करती है.

<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

शर्तों के हिसाब से तय किए गए रूट

RouteRules को चेन किया जा सकता है, ताकि रनटाइम के दौरान डाइनैमिक राउटिंग की जा सके. इनबाउंड अनुरोधों को इन जगहों पर भेजा जा सकता है: नाम वाले TargetEndpoint कॉन्फ़िगरेशन, सीधे यूआरएल या दोनों के कॉम्बिनेशन पर. ऐसा एचटीटीपी हेडर, मैसेज कॉन्टेंट, क्वेरी पैरामीटर या कॉन्टेक्स्ट के हिसाब से जानकारी के आधार पर किया जाता है. जैसे, दिन का समय, स्थान-भाषा वगैरह.

शर्तों के आधार पर तय की गई RouteRule, Apigee Edge पर अन्य कंडिशनल स्टेटमेंट की तरह काम करती हैं. शर्तों का रेफ़रंस और वैरिएबल का रेफ़रंस देखें.

उदाहरण के लिए, यहां दिए गए RouteRule कॉम्बिनेशन में, सबसे पहले इनबाउंड अनुरोध का आकलन किया जाता है. इससे एचटीटीपी हेडर की वैल्यू की पुष्टि की जा सकती है. अगर एचटीटीपी हेडर routeTo की वैल्यू TargetEndpoint1 है, तो अनुरोध को TargetEndpoint1 नाम वाले TargetEndpoint पर फ़ॉरवर्ड किया जाता है. अगर ऐसा नहीं होता है, तो आने वाले अनुरोध को http://api.mycompany.com/v2 पर फ़ॉरवर्ड कर दिया जाता है.

<RouteRule name="MyRoute">
  <Condition>request.header.routeTo = "TargetEndpoint1"</Condition>
  <TargetEndpoint>TargetEndpoint1</TargetEndpoint>
</RouteRule>
<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

नल रूट

RouteRule को शून्य के तौर पर तय किया जा सकता है. इससे उन स्थितियों में मदद मिलती है जिनमें अनुरोध वाले मैसेज को TargetEndpoint पर फ़ॉरवर्ड करने की ज़रूरत नहीं होती. यह तब काम आता है, जब ProxyEndpoint सभी ज़रूरी प्रोसेसिंग करता है. उदाहरण के लिए, JavaScript का इस्तेमाल करके किसी बाहरी सेवा को कॉल करना या API सेवाओं के कुंजी/वैल्यू स्टोर से डेटा वापस पाना.

उदाहरण के लिए, यहां एक शून्य रूट तय किया गया है:

<RouteRule name="GoNowhere"/>

शर्त के हिसाब से तय किए गए शून्य रास्तों का इस्तेमाल किया जा सकता है. यहां दिए गए उदाहरण में, एक नल रूट को कॉन्फ़िगर किया गया है. यह तब लागू होगा, जब एचटीटीपी हेडर request.header.X-DoNothing की वैल्यू null के अलावा कोई दूसरी वैल्यू होगी.

<RouteRule name="DoNothingOnDemand">
  <Condition>request.header.X-DoNothing != null</Condition>
</RouteRule>

ध्यान रखें कि RouteRules को एक साथ जोड़ा जा सकता है. इसलिए, शर्त के हिसाब से तय किया गया शून्य रूट, आम तौर पर RouteRules के सेट का एक कॉम्पोनेंट होता है. इसे शर्त के हिसाब से राउटिंग करने के लिए डिज़ाइन किया जाता है.

शर्त के हिसाब से तय की गई शून्य वैल्यू वाले रूट का इस्तेमाल, कैश मेमोरी के साथ किया जा सकता है. कैश मेमोरी की नीति से सेट किए गए वैरिएबल की वैल्यू का इस्तेमाल करके, एपीआई प्रॉक्सी को कॉन्फ़िगर किया जा सकता है. इससे, कैश मेमोरी से कोई एंट्री दिखाए जाने पर, एपीआई प्रॉक्सी, नल रूट को एक्ज़ीक्यूट कर सकती है.

<RouteRule name="DoNothingUnlessTheCacheIsStale">
  <Condition>lookupcache.LookupCache-1.cachehit is true</Condition>
</RouteRule>

TargetEndpoint

इस इमेज में, क्लाइंट को एचटीटीपी सेवा को कॉल करते हुए दिखाया गया है. अनुरोध, एचटीटीपी सेवा से प्रोसेस होने से पहले, प्रॉक्सी एंडपॉइंट और फिर टारगेट एंडपॉइंट से होकर जाता है. जवाब, क्लाइंट को वापस भेजने से पहले टारगेट एंडपॉइंट और फिर प्रॉक्सी एंडपॉइंट से होकर जाता है.

TargetEndpoint, ProxyEndpoint की तरह ही होता है. हालांकि, यह आउटबाउंड होता है. TargetEndpoint, बैकएंड सेवा या एपीआई के क्लाइंट के तौर पर काम करता है. यह अनुरोध भेजता है और जवाब पाता है.

एपीआई प्रॉक्सी में TargetEndpoints का होना ज़रूरी नहीं है. ProxyEndpoints को सीधे तौर पर यूआरएल कॉल करने के लिए कॉन्फ़िगर किया जा सकता है. TargetEndpoints के बिना एपीआई प्रॉक्सी में आम तौर पर एक ProxyEndpoint होता है. यह ProxyEndpoint, सीधे तौर पर बैकएंड सेवा को कॉल करता है या इसे Java या JavaScript का इस्तेमाल करके किसी सेवा को कॉल करने के लिए कॉन्फ़िगर किया जाता है.

TargetEndpoint कॉन्फ़िगरेशन

/targets/default.xml

TargetEndpoint, Apigee Edge से किसी अन्य सेवा या संसाधन के आउटबाउंड कनेक्शन को तय करता है.

यहां TargetEndpoint कॉन्फ़िगरेशन का एक सैंपल दिया गया है:

<TargetEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <SSLInfo/>
  </HTTPTargetConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <ScriptTarget/>
  <LocalTargetConnection/>
</TargetEndpoint>

TargetEndpoint कॉन्फ़िगरेशन एलिमेंट

TargetEndpoint, टारगेट को इनमें से किसी एक तरीके से कॉल कर सकता है:

  • एचटीटीपी या एचटीटीपीएस कॉल के लिए HTTPTargetConnection
  • लोकल प्रॉक्सी-टू-प्रॉक्सी चेनिंग के लिए LocalTargetConnection
  • Edge-hosted Node.js स्क्रिप्ट को कॉल करने के लिए ScriptTarget

TargetEndpoint में इनमें से सिर्फ़ एक को कॉन्फ़िगर करें.

नाम ब्यौरा डिफ़ॉल्ट ज़रूरी है?
TargetEndpoint
name TargetEndpoint का नाम, जो एपीआई प्रॉक्सी कॉन्फ़िगरेशन में यूनीक होना चाहिए. TargetEndpoint के नाम का इस्तेमाल, ProxyEndpoint के RouteRule में किया जाता है. इससे आउटबाउंड प्रोसेसिंग के लिए अनुरोधों को डायरेक्ट किया जा सकता है. नाम में सिर्फ़ इन वर्णों का इस्तेमाल किया जा सकता है: A-Za-z0-9._\-$ %. लागू नहीं हां
PreFlow यह अनुरोध या जवाब के PreFlow फ़्लो में नीतियों को तय करता है. लागू नहीं हां
Flows
इससे अनुरोध या जवाब के कंडीशनल फ़्लो में नीतियों के बारे में पता चलता है.
लागू नहीं हां
PostFlow
यह अनुरोध या जवाब के PostFlow फ़्लो में नीतियों को तय करता है.
लागू नहीं हां
HTTPTargetConnection

यह अपने चाइल्ड एलिमेंट के साथ, एचटीटीपी के ज़रिए बैकएंड रिसॉर्स तक पहुंचने की जानकारी देता है.

अगर HTTPTargetConnection का इस्तेमाल किया जाता है, तो अन्य तरह के टारगेट कनेक्शन (ScriptTarget या LocalTargetConnection) कॉन्फ़िगर न करें.

URL यह उस बैकएंड सेवा का नेटवर्क पता तय करता है जिस पर TargetEndpoint, अनुरोध मैसेज फ़ॉरवर्ड करता है. लागू नहीं नहीं
LoadBalancer

इसमें एक या उससे ज़्यादा टारगेटसर्वर कॉन्फ़िगरेशन के नाम तय किए जाते हैं. TargetServer के नाम वाले कॉन्फ़िगरेशन का इस्तेमाल, लोड बैलेंसिंग के लिए किया जा सकता है. इससे दो या उससे ज़्यादा एंडपॉइंट कॉन्फ़िगरेशन कनेक्शन तय किए जा सकते हैं.

TargetServers का इस्तेमाल करके, एपीआई प्रॉक्सी कॉन्फ़िगरेशन को बैकएंड सेवा के एंडपॉइंट यूआरएल से अलग किया जा सकता है.

बैकएंड सर्वर पर लोड बैलेंसिंग देखें.

लागू नहीं नहीं
Properties एचटीटीपी कॉन्फ़िगरेशन की कुछ सेटिंग को <TargetEndpoint> की प्रॉपर्टी के तौर पर तय किया जा सकता है. लागू नहीं नहीं
SSLInfo अगर आपको एपीआई प्रॉक्सी और टारगेट सेवा के बीच टीएलएस/एसएसएल कनेक्शन को कंट्रोल करना है, तो TargetEndpoint पर टीएलएस/एसएसएल सेटिंग तय करें. TLS/एसएसएल TargetEndpoint कॉन्फ़िगरेशन देखें. लागू नहीं नहीं
LocalTargetConnection यह अपने चाइल्ड एलिमेंट के साथ मिलकर, किसी ऐसे संसाधन के बारे में बताता है जिसे स्थानीय तौर पर ऐक्सेस किया जा सकता है. इसमें लोड बैलेंसिंग और मैसेज प्रोसेसर जैसी नेटवर्क की सुविधाओं को अनदेखा किया जाता है.

टारगेट रिसॉर्स तय करने के लिए, APIProxy चाइल्ड एलिमेंट (ProxyEndpoint एलिमेंट के साथ) या Path चाइल्ड एलिमेंट शामिल करें.

ज़्यादा जानकारी के लिए, एपीआई प्रॉक्सी को एक साथ चेन करना लेख पढ़ें.

अगर LocalTargetConnection का इस्तेमाल किया जाता है, तो टारगेट कनेक्शन के अन्य टाइप (HTTPTargetConnection या ScriptTarget) कॉन्फ़िगर न करें.

APIProxy इससे उस एपीआई प्रॉक्सी के नाम के बारे में पता चलता है जिसका इस्तेमाल अनुरोधों के टारगेट के तौर पर किया जाता है. टारगेट प्रॉक्सी, उसी संगठन और एनवायरमेंट में होनी चाहिए जिसमें अनुरोध भेजने वाली प्रॉक्सी है. यह पाथ एलिमेंट का इस्तेमाल करने का एक विकल्प है. लागू नहीं नहीं
ProxyEndpoint इस कुकी का इस्तेमाल APIProxy के साथ किया जाता है. इससे टारगेट प्रॉक्सी के ProxyEndpoint का नाम तय किया जाता है. लागू नहीं नहीं
Path इससे एपीआई प्रॉक्सी के एंडपॉइंट पाथ के बारे में पता चलता है. इसका इस्तेमाल अनुरोधों के टारगेट के तौर पर किया जाता है. टारगेट प्रॉक्सी, उसी संगठन और एनवायरमेंट में होनी चाहिए जिसमें अनुरोध भेजने वाली प्रॉक्सी है. यह APIProxy का इस्तेमाल करने का विकल्प है. लागू नहीं नहीं
FaultRules
इससे यह तय होता है कि TargetEndpoint किसी गड़बड़ी पर कैसे प्रतिक्रिया करता है. गड़बड़ी के नियम में दो आइटम शामिल होते हैं:
  • ऐसी शर्त जो पहले से तय की गई कैटगरी, सबकैटगरी या गड़बड़ी के नाम के आधार पर, ठीक की जाने वाली गड़बड़ी के बारे में बताती है
  • एक या उससे ज़्यादा ऐसी नीतियां जो किसी शर्त के लिए, गड़बड़ी के नियम के व्यवहार को तय करती हैं

गड़बड़ियों को ठीक करना लेख पढ़ें.

लागू नहीं नहीं
DefaultFaultRule

यह उन सभी गड़बड़ियों (सिस्टम, ट्रांसपोर्ट, मैसेज या नीति) को ठीक करता है जिन्हें किसी अन्य FaultRule ने साफ़ तौर पर ठीक नहीं किया है.

गड़बड़ियों को ठीक करना लेख पढ़ें.

लागू नहीं नहीं
ScriptTarget
ResourceURL

यह नोड के संसाधन टाइप और मुख्य Node.js स्क्रिप्ट के नाम को तय करता है. यह स्क्रिप्ट TargetEndpoint फ़ंक्शन को लागू करती है.

<ResourceURL>node://server.js</ResourceURL>

स्क्रिप्ट को, आपके एपीआई प्रॉक्सी की संसाधन फ़ाइलों के साथ शामिल किया जाना चाहिए. किसी मौजूदा एपीआई प्रॉक्सी में Node.js जोड़ना लेख पढ़ें.

अगर ScriptTarget का इस्तेमाल किया जाता है, तो टारगेट कनेक्शन के अन्य टाइप (HTTPTargetConnection या LocalTargetConnection) कॉन्फ़िगर न करें.

लागू नहीं हां
EnvironmentVariable

वैकल्पिक रूप से, मुख्य Node.js स्क्रिप्ट में एनवायरमेंट वैरिएबल पास करें.

Node.js मॉड्यूल के लिए, Edge के साथ काम करने की सुविधा के बारे में जानकारी देखें.

लागू नहीं नहीं
Arguments

वैकल्पिक तौर पर, मुख्य Node.js स्क्रिप्ट में आर्ग्युमेंट पास करें.

Node.js मॉड्यूल के लिए, Edge के साथ काम करने की सुविधा के बारे में जानकारी देखें.

लागू नहीं नहीं

टीएलएस/एसएसएल TargetEndpoint कॉन्फ़िगरेशन

TargetEndpoints को अक्सर अलग-अलग बैकएंड इंफ़्रास्ट्रक्चर के साथ एचटीटीपीएस कनेक्शन मैनेज करने पड़ते हैं. इस वजह से, टीएलएस/एसएसएल कॉन्फ़िगरेशन की कई सेटिंग काम करती हैं.

TargetEndpoint कॉन्फ़िगरेशन एलिमेंट के लिए TLS/SSL

नाम ब्यौरा डिफ़ॉल्ट ज़रूरी है?
SSLInfo
Enabled इससे पता चलता है कि एंडपॉइंट के लिए TLS/एसएसएल चालू है या नहीं. अगर <URL> में एचटीटीपीएस प्रोटोकॉल के बारे में बताया गया है, तो डिफ़ॉल्ट वैल्यू true होती है. अगर <URL> में एचटीटीपी के बारे में बताया गया है, तो डिफ़ॉल्ट वैल्यू false होती है. अगर <URL> में एचटीटीपीएस के बारे में बताया गया है, तो वैल्यू सही होती है नहीं
TrustStore यह एक कीस्टोर है, जिसमें भरोसेमंद सर्वर सर्टिफ़िकेट होते हैं. लागू नहीं नहीं
ClientAuthEnabled यह सेटिंग, आउटबाउंड क्लाइंट की पुष्टि करने की सुविधा (दोतरफ़ा टीएलएस/एसएसएल) चालू करती है गलत नहीं
KeyStore एक कीस्टोर, जिसमें आउटबाउंड क्लाइंट की पुष्टि करने के लिए इस्तेमाल की गई निजी कुंजियां होती हैं लागू नहीं हां (अगर ClientAuthEnabled की वैल्यू 'सही' है)
KeyAlias आउटबाउंड क्लाइंट की पुष्टि करने के लिए इस्तेमाल की गई निजी कुंजी का की-एलियास लागू नहीं हां (अगर ClientAuthEnabled की वैल्यू 'सही' है)
Ciphers

आउटबाउंड टीएलएस/एसएसएल के लिए काम करने वाले सिफ़र. अगर कोई सिफ़र तय नहीं किया जाता है, तो JVM के लिए उपलब्ध सभी सिफ़र इस्तेमाल किए जा सकेंगे.

साइफ़र को सीमित करने के लिए, यहां दिए गए एलिमेंट जोड़ें. इनमें काम करने वाले साइफ़र की सूची दी गई है:

<Ciphers>
 <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher>
 <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher>
</Ciphers>
लागू नहीं नहीं
Protocols

आउटबाउंड टीएलएस/एसएसएल के लिए काम करने वाले प्रोटोकॉल. अगर कोई प्रोटोकॉल नहीं बताया गया है, तो JVM के लिए उपलब्ध सभी प्रोटोकॉल को अनुमति दी जाएगी.

प्रोटोकॉल को सीमित करने के लिए, यहां दिए गए एलिमेंट जोड़ें. इनमें काम करने वाले प्रोटोकॉल की सूची दी गई है:

<Protocols>
 <Protocol>TLSv1.1</Protocol>
 <Protocol>TLSv1.2</Protocol>
</Protocols>
लागू नहीं नहीं
CommonName

अगर बताया गया है, तो वह वैल्यू जिसके आधार पर टारगेट सर्टिफ़िकेट के सामान्य नाम की पुष्टि की जाती है. यह वैल्यू सिर्फ़ TargetEndpoint और TargetServer कॉन्फ़िगरेशन के लिए मान्य है. यह VirtualHost कॉन्फ़िगरेशन के लिए मान्य नहीं है.

डिफ़ॉल्ट रूप से, दी गई वैल्यू को टारगेट सर्टिफ़िकेट के सामान्य नाम से पूरी तरह मैच किया जाता है. उदाहरण के लिए, <CommonName> के लिए *.myhost.com को वैल्यू के तौर पर इस्तेमाल करने पर, टारगेट होस्टनेम सिर्फ़ तब मैच और पुष्टि करेगा, जब टारगेट सर्टिफ़िकेट में सामान्य नाम के तौर पर *.myhost.com को सटीक वैल्यू के तौर पर बताया गया हो.

इसके अलावा, Apigee wildcardMatch एट्रिब्यूट का इस्तेमाल करके, वाइल्डकार्ड के साथ मैच कर सकता है.

उदाहरण के लिए, अगर टारगेट सर्टिफ़िकेट में abc.myhost.com के तौर पर बताया गया कोई सामान्य नाम, <CommonName> एलिमेंट के तौर पर यहां दिए गए तरीके से बताया गया है, तो उसका मिलान किया जाएगा और उसकी पुष्टि की जाएगी:

<CommonName wildcardMatch="true">*.myhost.com</CommonName>
लागू नहीं नहीं

आउटबाउंड क्लाइंट की पुष्टि करने की सुविधा चालू किए गए TargetEndpoint का सैंपल

<TargetEndpoint name="default">
  <HttpTargetConnection>
        <URL>https://myservice.com</URL>
    <SSLInfo>
      <Enabled>true</Enabled>
      <ClientAuthEnabled>true</ClientAuthEnabled>
      <KeyStore>myKeystore</KeyStore>
      <KeyAlias>myKey</KeyAlias>
      <TrustStore>myTruststore</TrustStore>
    </SSLInfo>
  </HttpTargetConnection>
</TargetEndpoint>

ज़्यादा जानकारी के लिए, Edge से लेकर बैकएंड (क्लाउड और प्राइवेट क्लाउड) तक टीएलएस कॉन्फ़िगर करना लेख पढ़ें.

टीएलएस/एसएसएल वैल्यू को डाइनैमिक तरीके से सेट करने के लिए, फ़्लो वैरिएबल का इस्तेमाल करना

इसके अलावा, टीएलएस/एसएसएल की जानकारी को डाइनैमिक तौर पर भी सेट किया जा सकता है, ताकि रनटाइम से जुड़ी ज़रूरी शर्तों को पूरा किया जा सके. उदाहरण के लिए, अगर आपकी प्रॉक्सी दो अलग-अलग टारगेट (टेस्ट टारगेट और प्रोडक्शन टारगेट) से कनेक्ट होती है, तो आपके पास अपनी एपीआई प्रॉक्सी को प्रोग्राम के हिसाब से यह पता लगाने की सुविधा होती है कि वह किस एनवायरमेंट को कॉल कर रही है. साथ ही, वह सही कीस्टोर और ट्रस्टस्टोर के लिए रेफ़रंस को डाइनैमिक तौर पर सेट कर सकती है. Apigee कम्यूनिटी के इस लेख में, इस स्थिति के बारे में ज़्यादा जानकारी दी गई है. साथ ही, डिप्लॉय की जा सकने वाली एपीआई प्रॉक्सी के उदाहरण दिए गए हैं: Dynamic SSLInfo for TargetEndpoint using variable reference.

TargetEndpoint कॉन्फ़िगरेशन में <SSLInfo> टैग को सेट करने के तरीके के इस उदाहरण में, वैल्यू को रनटाइम पर दिया जा सकता है. उदाहरण के लिए, Java Callout, JavaScript नीति या Assign Message नीति के ज़रिए. उन मैसेज वैरिएबल का इस्तेमाल करें जिनमें आपको वैल्यू सेट करनी हैं.

सिर्फ़ इन एलिमेंट में वैरिएबल इस्तेमाल किए जा सकते हैं.

<SSLInfo>
    <Enabled>{myvars.ssl.enabled}</Enabled>
    <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
    <KeyStore>{myvars.ssl.keystore}</KeyStore>
    <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
    <TrustStore>{myvars.ssl.trustStore}</TrustStore>
</SSLInfo>

टीएलएस/एसएसएल वैल्यू को डाइनैमिक तौर पर सेट करने के लिए रेफ़रंस का इस्तेमाल करना

एचटीटीपीएस का इस्तेमाल करने वाले TargetEndpoint को कॉन्फ़िगर करते समय, आपको यह ध्यान रखना होगा कि टीएलएस/एसएसएल सर्टिफ़िकेट कब एक्सपायर होता है. इसके अलावा, सिस्टम कॉन्फ़िगरेशन में बदलाव होने पर, आपको सर्टिफ़िकेट अपडेट करना होगा. Edge for Private Cloud इंस्टॉलेशन में, स्टैटिक वैल्यू या फ़्लो वैरिएबल का इस्तेमाल करके टीएलएस/एसएसएल को कॉन्फ़िगर करते समय, आपको मैसेज प्रोसेसर को रीस्टार्ट करना पड़ सकता है.

ज़्यादा जानकारी के लिए, टीएलएस सर्टिफ़िकेट अपडेट करना लेख पढ़ें.

हालांकि, आपके पास TargetEndpoint को कॉन्फ़िगर करने का विकल्प होता है, ताकि वह कीस्टोर या ट्रस्टस्टोर के रेफ़रंस का इस्तेमाल कर सके. रेफ़रंस का इस्तेमाल करने का फ़ायदा यह है कि टीएलएस/एसएसएल सर्टिफ़िकेट को अपडेट करने के लिए, आपको मैसेज प्रोसेसर को रीस्टार्ट करने की ज़रूरत नहीं होती. इसके बजाय, किसी दूसरे कीस्टोर या ट्रस्टस्टोर की ओर इशारा करने के लिए, रेफ़रंस को अपडेट किया जा सकता है.

उदाहरण के लिए, यहां एक TargetEndpoint दिखाया गया है, जो कीस्टोर के रेफ़रंस का इस्तेमाल करता है:

<SSLInfo>
    <Enabled>true</Enabled>
    <ClientAuthEnabled>false</ClientAuthEnabled>
    <KeyStore>ref://keystoreref</KeyStore>
    <KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>

keystoreref नाम का रेफ़रंस बनाने के लिए, यहां दिए गए POST API कॉल का इस्तेमाल करें:

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
-d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:password

रेफ़रंस में कीस्टोर का नाम और उसका टाइप बताया जाता है.

रेफ़रंस देखने के लिए, यहां दिया गया GET API कॉल इस्तेमाल करें:

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

बाद में, किसी दूसरे कीस्टोर को पॉइंट करने के लिए रेफ़रंस बदलने के लिए, यह पक्का करें कि ऐलियास का नाम एक जैसा हो. इसके लिए, यहाँ दिया गया PUT कॉल इस्तेमाल करें:

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
-d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:password

टारगेट लोड बैलेंसिंग के साथ TargetEndpoint

TargetEndpoints, लोड बैलेंसिंग के तीन एल्गोरिदम का इस्तेमाल करके, कई TargetServers के बीच लोड बैलेंसिंग की सुविधा देते हैं.

ज़्यादा जानकारी के लिए, बैकएंड सर्वर के बीच लोड बैलेंसिंग लेख पढ़ें.

नीतियां

एपीआई प्रॉक्सी में मौजूद /policies डायरेक्ट्री में, वे सभी नीतियां होती हैं जिन्हें एपीआई प्रॉक्सी में मौजूद फ़्लो से जोड़ा जा सकता है.

नीति कॉन्फ़िगरेशन के एलिमेंट

नाम ब्यौरा डिफ़ॉल्ट ज़रूरी है?
Policy
name

नीति का इंटरनल नाम. नाम में सिर्फ़ इन वर्णों का इस्तेमाल किया जा सकता है: A-Za-z0-9._\-$ %. हालांकि, Edge मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) में कुछ और पाबंदियां लागू होती हैं. जैसे, अल्फ़ान्यूमेरिक वर्णों के अलावा अन्य वर्णों को अपने-आप हटाना.

इसके अलावा, <DisplayName> एलिमेंट का इस्तेमाल करके, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) के प्रॉक्सी एडिटर में नीति को किसी दूसरे नाम से लेबल करें. यह नाम, सामान्य भाषा में होना चाहिए.

लागू नहीं हां
enabled

नीति लागू करने के लिए, इसे true पर सेट करें.

नीति को "बंद करने" के लिए, false पर सेट करें. अगर यह नीति किसी फ़्लो से जुड़ी रहती है, तब भी इसे लागू नहीं किया जाएगा.

सही नहीं
continueOnError

नीति के उल्लंघन की स्थिति में गड़बड़ी का मैसेज दिखाने के लिए, इसे false पर सेट करें. ज़्यादातर नीतियों के लिए, ऐसा होना आम बात है.

इस विकल्प को true पर सेट करें, ताकि नीति के लागू न होने के बाद भी फ़्लो का एक्ज़ीक्यूशन जारी रहे.

गलत नहीं
async

ध्यान दें: इस एट्रिब्यूट से, नीति को एसिंक्रोनस तरीके से लागू नहीं किया जा सकता. ज़्यादातर मामलों में, इसे false की डिफ़ॉल्ट वैल्यू पर छोड़ दें.

true पर सेट करने पर, नीति के लागू होने की प्रोसेस को किसी दूसरी थ्रेड पर भेज दिया जाता है. इससे मुख्य थ्रेड, अन्य अनुरोधों को प्रोसेस कर पाती है. बिना इंटरनेट के प्रोसेस पूरी होने पर, मुख्य थ्रेड वापस आ जाती है और मैसेज फ़्लो को हैंडल करना पूरा कर देती है. कुछ मामलों में, एसिंक को true पर सेट करने से, एपीआई प्रॉक्सी की परफ़ॉर्मेंस बेहतर होती है. हालांकि, एसिंक फ़ंक्शन का ज़्यादा इस्तेमाल करने से, थ्रेड स्विचिंग बहुत ज़्यादा हो जाती है. इससे परफ़ॉर्मेंस पर असर पड़ सकता है.

एपीआई प्रॉक्सी में एसिंक्रोनस व्यवहार का इस्तेमाल करने के लिए, JavaScript ऑब्जेक्ट मॉडल देखें.

गलत नहीं

नीति अटैच करना

इस इमेज में, एपीआई प्रॉक्सी के फ़्लो को लागू करने का क्रम दिखाया गया है:

इस इमेज में, किसी क्लाइंट को एचटीटीपी सेवा को कॉल करते हुए दिखाया गया है. अनुरोध, ProxyEndpoint और TargetEndpoint से होकर गुज़रता है. इनमें ऐसे चरण शामिल होते हैं जिनसे नीतियां ट्रिगर होती हैं. एचटीटीपी सेवा से जवाब मिलने के बाद, TargetEndpoint उस जवाब को प्रोसेस करता है. इसके बाद, ProxyEndpoint उस जवाब को प्रोसेस करता है. इसके बाद, उसे क्लाइंट को भेजा जाता है. अनुरोध की तरह ही, जवाब को भी नीतियों के हिसाब से प्रोसेस किया जाता है.

ऊपर दिखाए गए तरीके से:

नीतियों को फ़्लो में प्रोसेसिंग के चरणों के तौर पर अटैच किया जाता है. नीति के नाम का इस्तेमाल, उस नीति को रेफ़रंस देने के लिए किया जाता है जिसे प्रोसेसिंग के चरण के तौर पर लागू करना है. नीति के अटैचमेंट का फ़ॉर्मैट यह है:

<Step><Name>MyPolicy</Name></Step>

नीतियों को उसी क्रम में लागू किया जाता है जिस क्रम में उन्हें फ़्लो से जोड़ा जाता है. उदाहरण के लिए:

<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>

नीति अटैच करने के कॉन्फ़िगरेशन एलिमेंट

नाम ब्यौरा डिफ़ॉल्ट ज़रूरी है?
Step
Name उस नीति का नाम जिसे इस चरण की परिभाषा के ज़रिए लागू किया जाना है. लागू नहीं हां
Condition यह एक शर्त वाला स्टेटमेंट है, जिससे यह तय होता है कि नीति लागू की गई है या नहीं. अगर किसी नीति से कोई शर्त जुड़ी है, तो नीति सिर्फ़ तब लागू होती है, जब शर्त वाला स्टेटमेंट सही हो. लागू नहीं नहीं

फ़्लो

ProxyEndpoint और TargetEndpoint, अनुरोध और जवाब के मैसेज को प्रोसेस करने के लिए पाइपलाइन तय करते हैं. प्रोसेसिंग पाइपलाइन में, अनुरोध फ़्लो और जवाब फ़्लो शामिल होता है. हर अनुरोध और जवाब के फ़्लो को PreFlow, एक या उससे ज़्यादा वैकल्पिक 'conditional' या 'named' फ़्लो, और PostFlow में बांटा जाता है.

  • PreFlow: यह हमेशा एक्ज़ीक्यूट होता है. यह किसी भी शर्त वाले फ़्लो से पहले लागू होता है.
  • PostFlow: यह हमेशा लागू होता है. यह किसी भी शर्त के साथ काम करने वाले फ़्लो के बाद काम करता है.

इसके अलावा, ProxyEndpoint में PostClientFlow जोड़ा जा सकता है. यह अनुरोध करने वाले क्लाइंट ऐप्लिकेशन को जवाब मिलने के बाद काम करता है. इस फ़्लो में सिर्फ़ MessageLogging नीति और Google Stackdriver Logging Extension को जोड़ा जा सकता है. PostClientFlow से एपीआई प्रॉक्सी की लेटेन्सी कम हो जाती है. साथ ही, यह ऐसी जानकारी को लॉग करने के लिए उपलब्ध कराता है जिसकी गिनती तब तक नहीं की जाती, जब तक क्लाइंट को जवाब नहीं मिल जाता. जैसे, client.sent.start.timestamp और client.sent.end.timestamp. इस फ़्लो का इस्तेमाल मुख्य रूप से, जवाब वाले मैसेज के शुरू और खत्म होने के टाइमस्टैंप के बीच के समय को मेज़र करने के लिए किया जाता है.

इस बारे में जानकारी देने वाला छोटा वीडियो देखें

वीडियो: PostClientFlow में मैसेज लॉगिंग का इस्तेमाल करने के बारे में यह छोटा वीडियो देखें.

यहां मैसेज लॉग करने की नीति के साथ PostClientFlow का उदाहरण दिया गया है.

    ...
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <PostClientFlow>
        <Request/>
        <Response>
            <Step>
                <Name>Message-Logging-1</Name>
            </Step>
        </Response>
    </PostClientFlow>
    ...

एपीआई प्रॉक्सी प्रोसेसिंग पाइपलाइन, फ़्लो को इस क्रम में लागू करती है:

अनुरोध पाइपलाइन:

  1. प्रॉक्सी अनुरोध का PreFlow
  2. प्रॉक्सी अनुरोध के लिए शर्त के साथ फ़्लो (ज़रूरी नहीं है)
  3. Proxy Request PostFlow
  4. Target Request PreFlow
  5. टारगेट अनुरोध के लिए शर्त के साथ फ़्लो (ज़रूरी नहीं)
  6. Target Request PostFlow

जवाब देने की प्रोसेस:

  1. Target Response PreFlow
  2. टारगेट रिस्पॉन्स कंडीशनल फ़्लो (ज़रूरी नहीं)
  3. Target Response PostFlow
  4. Proxy Response PreFlow
  5. प्रॉक्सी रिस्पॉन्स के लिए शर्त के साथ फ़्लो (ज़रूरी नहीं)
  6. Proxy Response PostFlow
  7. PostClientFlow Response (ज़रूरी नहीं)

नीति अटैचमेंट वाले फ़्लो को ही ProxyEndpoint या TargetEndpoint कॉन्फ़िगरेशन में कॉन्फ़िगर किया जाना चाहिए. प्रीफ़्लो और पोस्टफ़्लो को सिर्फ़ ProxyEndpoint या TargetEndpoint कॉन्फ़िगरेशन में तब तय किया जाना चाहिए, जब प्रीफ़्लो या पोस्टफ़्लो प्रोसेसिंग के दौरान किसी नीति को लागू करना हो.

शर्त के साथ लागू होने वाले फ़्लो के उलट, PreFlow और PostFlow के एलिमेंट का क्रम मायने नहीं रखता. एपीआई प्रॉक्सी, पाइपलाइन में हमेशा सही समय पर हर एलिमेंट को लागू करेगी. भले ही, वे एंडपॉइंट कॉन्फ़िगरेशन में कहीं भी दिखें.

कंडिशनल फ़्लो

ProxyEndpoints और TargetEndpoints में, शर्तों के हिसाब से काम करने वाले फ़्लो (इन्हें 'नाम वाले फ़्लो' भी कहा जाता है) की कोई सीमा नहीं होती.

एपीआई प्रॉक्सी, शर्त के साथ लागू होने वाले फ़्लो में बताई गई शर्त की जांच करती है. अगर शर्त पूरी हो जाती है, तो एपीआई प्रॉक्सी, शर्त के साथ लागू होने वाले फ़्लो में प्रोसेसिंग के चरणों को पूरा करती है. अगर शर्त पूरी नहीं होती है, तो शर्त के हिसाब से तय किए गए फ़्लो में प्रोसेसिंग के चरणों को छोड़ दिया जाता है. शर्त के आधार पर फ़्लो का आकलन, एपीआई प्रॉक्सी में तय किए गए क्रम में किया जाता है. साथ ही, जिस फ़्लो की शर्त पूरी होती है उसे सबसे पहले लागू किया जाता है.

शर्तों के हिसाब से फ़्लो तय करने पर, आपको एपीआई प्रॉक्सी में प्रोसेसिंग के चरण लागू करने की सुविधा मिलती है. ये चरण, इन बातों के आधार पर लागू किए जाते हैं:

  • अनुरोध URI
  • एचटीटीपी वर्ब (GET/PUT/POST/DELETE)
  • क्वेरी पैरामीटर, हेडर, और फ़ॉर्म पैरामीटर की वैल्यू
  • कई अन्य तरह की शर्तें

उदाहरण के लिए, यहां दिए गए कंडीशनल फ़्लो में बताया गया है कि यह सिर्फ़ तब लागू होता है, जब अनुरोध किए गए रिसॉर्स का पाथ /accesstoken हो. /accesstoken पाथ वाले किसी भी इनबाउंड अनुरोध से, यह फ़्लो लागू होता है. साथ ही, फ़्लो से जुड़ी नीतियां भी लागू होती हैं. अगर अनुरोध के पाथ में /accesstoken प्रत्यय शामिल नहीं है, तो फ़्लो लागू नहीं होता. हालांकि, कोई दूसरा शर्त वाला फ़्लो लागू हो सकता है.

<Flows>
  <Flow name="TokenEndpoint">
    <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
    <Request>
      <Step>
        <Name>GenerateAccessToken</Name>
      </Step>
    </Request>
  </Flow>
</Flows>

फ़्लो कॉन्फ़िगरेशन एलिमेंट

नाम ब्यौरा डिफ़ॉल्ट ज़रूरी है?
Flow A ProxyEndpoint या TargetEndpoint से तय की गई अनुरोध या जवाब को प्रोसेस करने वाली पाइपलाइन
Name फ़्लो का यूनीक नाम. लागू नहीं हां
Condition यह एक शर्त वाला स्टेटमेंट है. यह एक या उससे ज़्यादा वैरिएबल का आकलन करके, सही या गलत का पता लगाता है. प्रीफ़्लो और पोस्टफ़्लो के पहले से तय किए गए टाइप के अलावा, अन्य सभी फ़्लो के लिए, उनके एक्ज़ीक्यूशन की शर्त तय करना ज़रूरी है. लागू नहीं हां
Request अनुरोध मैसेज को प्रोसेस करने से जुड़ी पाइपलाइन लागू नहीं नहीं
Response जवाब वाले मैसेज को प्रोसेस करने से जुड़ी पाइपलाइन लागू नहीं नहीं

स्टेप प्रोसेसिंग

शर्तों के साथ फ़्लो को क्रम से लागू करने की सुविधा, Apigee Edge लागू करता है. शर्त के हिसाब से काम करने वाले फ़्लो, ऊपर से नीचे की ओर काम करते हैं. जिस फ़्लो की शर्त true होती है उसे सबसे पहले लागू किया जाता है. साथ ही, सिर्फ़ एक फ़्लो लागू किया जाता है.

उदाहरण के लिए, यहां दिए गए फ़्लो कॉन्फ़िगरेशन में, अगर किसी इनबाउंड अनुरोध में पाथ सफ़िक्स /first या /second शामिल नहीं है, तो ThirdFlow लागू होगा. इससे Return404 नाम की नीति लागू होगी.

<Flows>
  <Flow name="FirstFlow">
    <Condition>proxy.pathsuffix MatchesPath "/first"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="SecondFlow">
    <Condition>proxy.pathsuffix MatchesPath "/second"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
      <Step><Name>SecondPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="ThirdFlow">
    <Request>
      <Step><Name>Return404</Name></Step>
    </Request>
  </Flow>
</Flows>

संसाधन

"संसाधन" (एपीआई प्रॉक्सी में इस्तेमाल की जाने वाली संसाधन फ़ाइलें) स्क्रिप्ट, कोड, और XSL ट्रांसफ़ॉर्मेशन होते हैं. इन्हें नीतियों का इस्तेमाल करके फ़्लो से जोड़ा जा सकता है. ये मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) में, एपीआई प्रॉक्सी एडिटर के "स्क्रिप्ट" सेक्शन में दिखते हैं.

जिन संसाधन टाइप के लिए यह सुविधा उपलब्ध है उनके बारे में जानने के लिए, संसाधन फ़ाइलें देखें.

संसाधन, एपीआई प्रॉक्सी, एनवायरमेंट या संगठन में सेव किए जा सकते हैं. हर मामले में, किसी संसाधन को नीति में नाम से रेफ़र किया जाता है. एपीआई सेवाएं, एपीआई प्रॉक्सी से एनवायरमेंट और फिर संगठन के लेवल पर जाकर नाम का पता लगाती हैं.

संगठन के लेवल पर सेव किए गए संसाधन का रेफ़रंस, किसी भी एनवायरमेंट में मौजूद नीतियों के लिए इस्तेमाल किया जा सकता है. एनवायरमेंट लेवल पर सेव किए गए किसी संसाधन का रेफ़रंस, उस एनवायरमेंट में मौजूद नीतियां दे सकती हैं. एपीआई प्रॉक्सी लेवल पर सेव किए गए किसी संसाधन को सिर्फ़ उस एपीआई प्रॉक्सी में मौजूद नीतियां रेफ़रंस कर सकती हैं.