आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
एपीआई प्रॉक्सी, बैकएंड सेवाओं के लिए मैनेज किया गया फ़ेसड होता है. किसी एपीआई प्रॉक्सी के बुनियादी कॉन्फ़िगरेशन में ये शामिल होते हैं: ProxyEndpoint (एपीआई प्रॉक्सी का यूआरएल तय करता है) और TargetEndpoint (बैकएंड सेवा का यूआरएल तय करता है).
Apigee Edge, इस पैटर्न के आधार पर बेहतर तरीके से काम करने वाले ऐप्लिकेशन बनाने के लिए कई तरह की सुविधाएं देता है. उदाहरण के लिए, एपीआई के ज़रिए क्लाइंट के अनुरोध को बैकएंड सेवा पर भेजने से पहले, उसे प्रोसेस करने के तरीके को कंट्रोल करने के लिए नीतियां जोड़ी जा सकती हैं. इसके अलावा, बैकएंड सेवा से मिले जवाब को क्लाइंट को भेजने से पहले, उसमें बदलाव किया जा सकता है. सेवा कॉलआउट की नीतियों का इस्तेमाल करके, अन्य सेवाओं को चालू किया जा सकता है. साथ ही, JavaScript कोड जोड़कर, कस्टम व्यवहार जोड़ा जा सकता है. इसके अलावा, एक एपीआई प्रॉक्सी भी बनाई जा सकती है, जो बैकएंड सेवा को चालू नहीं करती.
ऐंटीपैटर्न
एपीआई प्रॉक्सी में बैकएंड सेवा को चालू करने के लिए, सेवा कॉलआउट का इस्तेमाल किया जा सकता है. हालांकि, इसमें टारगेट एंडपॉइंट तक पहुंचने के लिए कोई रूट नहीं होता. इससे बाहरी सेवा की परफ़ॉर्मेंस के बारे में आंकड़ों का डेटा नहीं मिल पाता.
टारगेट रूट शामिल न करने वाली एपीआई प्रॉक्सी, उन मामलों में काम आ सकती है जहां आपको अनुरोध मैसेज को TargetEndpoint पर फ़ॉरवर्ड करने की ज़रूरत नहीं होती. इसके बजाय, ProxyEndpoint सभी ज़रूरी प्रोसेसिंग करता है. उदाहरण के लिए, ProxyEndpoint, एपीआई सेवा के कुंजी/वैल्यू स्टोर में लुकअप से डेटा वापस पा सकता है और बैकएंड सेवा को शुरू किए बिना जवाब दे सकता है.
एपीआई प्रॉक्सी में, नल रूट तय किया जा सकता है. इसके लिए, यहां दिया गया तरीका अपनाएं:
<RouteRule name="noroute"/>
नल रूट का इस्तेमाल करने वाली प्रॉक्सी को "नो टारगेट" प्रॉक्सी कहा जाता है, क्योंकि यह टारगेट बैकएंड सेवा को शुरू नहीं करती है.
तकनीकी तौर पर, किसी बाहरी सेवा को शुरू करने के लिए, नो टारगेट प्रॉक्सी में सेवा कॉलआउट जोड़ा जा सकता है. इसे नीचे दिए गए उदाहरण में दिखाया गया है:
<!-- /antipatterns/examples/service-callout-no-target-1.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ProxyEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request> <Step> <Name>ServiceCallout-InvokeBackend</Name> </Step> </Request> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPProxyConnection> <BasePath>/no-target-proxy</BasePath> <Properties/> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection> <RouteRule name="noroute"/> </ProxyEndpoint>
हालांकि, प्रॉक्सी बाहरी सेवा के व्यवहार (जैसे कि प्रोसेसिंग में लगने वाला समय या गड़बड़ी की दर) के बारे में आंकड़ों की जानकारी नहीं दे सकती. इससे बाहरी सेवा की परफ़ॉर्मेंस का आकलन करना मुश्किल हो जाता है.
असर
- बाहरी सेवा के साथ इंटरैक्शन के बारे में Analytics की जानकारी उपलब्ध नहीं है. जैसे, गड़बड़ी के कोड, रिस्पॉन्स टाइम, टारगेट परफ़ॉर्मेंस वगैरह
- सेवा कॉलआउट को शुरू करने से पहले या बाद में ज़रूरी कोई भी खास लॉजिक, पूरे प्रॉक्सी लॉजिक का हिस्सा होता है. इससे इसे समझना और फिर से इस्तेमाल करना मुश्किल हो जाता है.
सबसे सही तरीका
अगर कोई एपीआई प्रॉक्सी सिर्फ़ एक बाहरी सेवा के साथ इंटरैक्ट करती है, तो प्रॉक्सी को बुनियादी डिज़ाइन पैटर्न का पालन करना चाहिए. इसमें बैकएंड सेवा को एपीआई प्रॉक्सी के टारगेट एंडपॉइंट के तौर पर तय किया जाता है. अगर किसी प्रॉक्सी में टारगेट एंडपॉइंट पर रूट करने के नियम नहीं हैं, तो उसे ServiceCallout नीति का इस्तेमाल करके बैकएंड सेवा को शुरू नहीं करना चाहिए.
यहां दिए गए प्रॉक्सी कॉन्फ़िगरेशन में, ऊपर दिए गए उदाहरण की तरह ही काम किया जाता है. हालांकि, इसमें सबसे सही तरीकों का पालन किया जाता है:
<!-- /antipatterns/examples/service-callout-no-target-2.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ProxyEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPProxyConnection> <BasePath>/simple-proxy-with-route-to-backend</BasePath> <Properties/> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection> <RouteRule name="default"> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
मैशअप के उदाहरणों के लिए, सेवा के कॉलआउट का इस्तेमाल करें. इनमें आपको टारगेट एंडपॉइंट को शुरू करने से पहले या बाद में, बाहरी सेवाओं को शुरू करना होता है. सेवा के कॉलआउट, टारगेट एंडपॉइंट के इनवोकेशन की जगह नहीं ले सकते.