एंटीपैटर्न: 'कोई टारगेट एपीआई नहीं' प्रॉक्सी में बैकएंड सेवा शुरू करने के लिए, सेवा कॉलआउट की नीति का इस्तेमाल करें

आपको 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&quo>t<; standalone="yes">?
Pro<xyEndpoint n>ame=&<quot;defaul>t&quo<t;
    Description/
  >  FaultRu<les/
  >  PreFlow nam<e=&q>uot;PreFlow"<
   >     Request
            Ste<p
   >             <NameS>erviceCal<lout-Inv>okeBacken<d/Name
  >     <     /St>ep
  <      /Request
        R>esponse/
<    /Pre>Flow
    <PostFlow >name=<"Pos>tFlow<">
    <    Request/
      >  Respons<e/
    />PostFlow
    Flo<ws/
    H>TTPProxyC<onnection
 >       Ba<sePath/no-t>arget-<proxy/BasePa>th
  <      Properties/
  >     < VirtualHostsecure/Virtua>l<Host
    /HTTP>ProxyConnection
    RouteRule name="noroute"/
/ProxyEndpoint

हालांकि, प्रॉक्सी सर्वर बाहरी सेवा के व्यवहार (जैसे कि प्रोसेसिंग समय या गड़बड़ी की दर) के बारे में आंकड़े नहीं दे सकता, जिससे बाहरी सेवा की परफ़ॉर्मेंस का आकलन करना मुश्किल हो जाता है.

असर

  • बाहरी सेवा के साथ इंटरैक्शन के बारे में Analytics की जानकारी ( गड़बड़ी कोड, जवाब देने का समय, टारगेट परफ़ॉर्मेंस वगैरह) उपलब्ध नहीं है
  • सेवा कॉलआउट शुरू करने से पहले या बाद में ज़रूरी किसी भी खास तर्क को इस तरह शामिल किया गया है का हिस्सा है, जिससे इसे समझना और फिर से इस्तेमाल करना मुश्किल हो जाता है.

सबसे सही तरीका

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

यहां दिया गया प्रॉक्सी कॉन्फ़िगरेशन ठीक वैसा ही काम करता है जैसा ऊपर दिए गए उदाहरण में किया गया है, लेकिन यह सबसे सही तरीके से काम करता है तरीके:

<!-- /antipatterns/examples/service-callout-no-target-2.xml -->
<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes">?
Pro<xyEndpoint n>ame=&<quot;defaul>t&quo<t;
    Description/
  >  FaultRu<les/
   > PreFlow <name=&quo>t;Pre<Flow&quo>t;
  <      Request/
        R>esponse/
<    /Pre>Flow
    <PostFlow >name=<"Pos>tFlow<">
    <    Request/
      >  Respons<e/
    />PostFlow
    Flows/
    HTTPProxyCo<nnection<>/span>
        B<asePath/sim>ple-proxy<-with-route>-to-ba<ckend/BasePa>th
  <      Properties/
  >     < VirtualHostsecure/Virtu>alHost
  <  /HTTPProxyCo>nnectio<n
    RouteRule> name<="def>a<ult"
    >    TargetEndpointdefault/TargetEndpoint
    /RouteRule
/ProxyEndpoint

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

इसके बारे में और पढ़ें