सेवा कॉल करने की नीति

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

यह क्या है

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

  • बाहरी इस्तेमाल के उदाहरण में, आपको किसी तीसरे पक्ष के एपीआई को कॉल आउट करना होता है. यह कॉल आउट आपकी प्रॉक्सी टीम से बाहर का है. तीसरे पक्ष के एपीआई के रिस्पॉन्स को पार्स करके, आपके एपीआई के रिस्पॉन्स मैसेज में शामिल किया जाता है. इससे ऐप्लिकेशन के असली उपयोगकर्ताओं के लिए, डेटा को बेहतर और "मैश अप" किया जाता है. अनुरोध करते समय, सेवा कॉलआउट की नीति का इस्तेमाल करके भी अनुरोध किया जा सकता है. इसके बाद, अनुरोध के जवाब में यह जानकारी एपीआई प्रॉक्सी के TargetEndpoint को भेजें.
  • इस्तेमाल के दूसरे मामले में, प्रॉक्सी को उसी संगठन और एनवायरमेंट में शामिल किया जाता है जिसका इस्तेमाल वह व्यक्ति करता है जिससे कॉल किया जा रहा है. उदाहरण के लिए, यह आपको तब काम का लग सकता है, जब आपके पास कोई ऐसी प्रॉक्सी हो जो कुछ अलग तरह के काम करते हों और जिन्हें एक या एक से ज़्यादा प्रॉक्सी इस्तेमाल कर रहे हों. उदाहरण के लिए, बैकएंड डेटा स्टोर की मदद से बनाने/पढ़ने/अपडेट करने/मिटाने की कार्रवाई दिखाने वाली प्रॉक्सी, क्लाइंट को डेटा दिखाने वाले कई दूसरे प्रॉक्सी के लिए टारगेट प्रॉक्सी हो सकती है.

यह नीति एचटीटीपी और एचटीटीपीएस पर अनुरोध के साथ काम करती है.

सैंपल

किसी इंटरनल प्रॉक्सी को लोकल कॉल करें

<LocalTargetConnection>
    <APIProxy>data-manager</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

यह उदाहरण data-manager नाम के एक लोकल एपीआई प्रॉक्सी (यानी कि एक ही संगठन और एनवायरमेंट में मौजूद एक) के लिए कॉलआउट बनाता है. साथ ही, उस प्रॉक्सी एंडपॉइंट के बारे में बताता है जिसका नाम default है.

यूआरएल को वैरिएबल के तौर पर इस्तेमाल करें

<HTTPTargetConnection>
    <URL>http://example.com/{request.myResourcePath}</URL>
</HTTPTargetConnection>

इस उदाहरण में, टारगेट के यूआरएल को डाइनैमिक तरीके से भरने के लिए, यूआरएल में एक वैरिएबल का इस्तेमाल किया गया है. यूआरएल के प्रोटोकॉल वाले हिस्से, http:// को, वैरिएबल की मदद से नहीं दिखाया जा सकता. साथ ही, आपको यूआरएल के डोमेन वाले हिस्से और यूआरएल के बाकी हिस्से के लिए, अलग-अलग वैरिएबल का इस्तेमाल करना होगा.

Google जियोकोडिंग / अनुरोध परिभाषित करें

<ServiceCallout name="ServiceCallout-GeocodingRequest1">
    <DisplayName>Inline request message</DisplayName>
    <Request variable="authenticationRequest">
      <Set>
        <QueryParams>
          <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
          <QueryParam name="region">{request.queryparam.country}</QueryParam>
          <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
      </Set>
    </Request>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>
http://maps.googleapis.com/maps/api/geocode/json

अनुरोध ऑब्जेक्ट बनाने के लिए, 'मैसेज असाइन करें' जैसी नीति का इस्तेमाल करने के बजाय, इसकी जानकारी सीधे सेवा कॉलआउट की नीति में दी जा सकती है. इस उदाहरण में, सेवा की कॉलआउट नीति बाहरी सेवा को पास किए गए तीन क्वेरी पैरामीटर की वैल्यू सेट करती है. सेवा कॉलआउट की नीति में, अनुरोध का पूरा मैसेज बनाया जा सकता है. इसमें पेलोड, एन्कोडिंग के टाइप, जैसे कि application/xml, हेडर, फ़ॉर्म पैरामीटर वगैरह के बारे में बताया जा सकता है.

यहां एक और उदाहरण दिया गया है, जिसमें सेवा कॉलआउट की नीति पर पहुंचने से पहले अनुरोध किया जाता है.

<ServiceCallout name="ServiceCallout-GeocodingRequest2">
    <Request clearPayload="false" variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

अनुरोध किए गए मैसेज का कॉन्टेंट, GeocodingRequest नाम के वैरिएबल से निकाला जाता है. इस वैरिएबल को अपने-आप भरा जा सकता है. उदाहरण के लिए, किसीassignMessage नीति की मदद से. रिस्पॉन्स मैसेज, GeocodingResponse नाम के वैरिएबल को असाइन किया जाता है. यहां इसे एक्सट्रैक्ट वैरिएबल नीति या JavaScript या Java में लिखे गए कस्टम कोड की मदद से पार्स किया जा सकता है. समयसीमा खत्म होने से पहले, नीति को 30 सेकंड तक Google जियोकोडिंग एपीआई से जवाब मिलता है.

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

कॉल टारगेट सर्वर

<ServiceCallout async="false" continueOnError="false" enabled="true" name="service-callout">
    <DisplayName>service-callout</DisplayName>
    <Properties/>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </Request>
    <Response>myResponse</Response>
    <HTTPTargetConnection>
        <LoadBalancer>
            <Algorithm>RoundRobin</Algorithm>
            <Server name="httpbin"/>
            <Server name="yahoo"/>
        </LoadBalancer>
        <Path>/get</Path>
    </HTTPTargetConnection>
</ServiceCallout>

यह नीति, टारगेट सर्वर को कॉल करने और उन सर्वर पर लोड बैलेंस करने के लिए, Load Balancer एट्रिब्यूट का इस्तेमाल करती है. इस उदाहरण में, लोड को "httpbin" और "yahoo" नाम वाले दो टारगेट सर्वर में बांटा गया है. अपनी प्रॉक्सी के लिए टारगेट सर्वर सेट अप करने और लोड बैलेंसिंग को कॉन्फ़िगर करने के बारे में जानकारी के लिए, सभी बैकएंड सर्वर पर लोड बैलेंसिंग लेख पढ़ें.


सेवा कॉलआउट की नीति के बारे में जानकारी

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

आम तौर पर कॉलआउट का इस्तेमाल दो अन्य नीतियों के साथ किया जाता है: मैसेज असाइन करना और वैरिएबल एक्सट्रैक्ट करना.

  • अनुरोध करें: मैसेज असाइन करने से, रिमोट सेवा को भेजे गए अनुरोध के मैसेज की जानकारी अपने-आप भर जाती है.
  • रिस्पॉन्स: एक्सट्रैक्ट वैरिएबल, रिस्पॉन्स को पार्स करता है और खास कॉन्टेंट निकालता है.

सेवा कॉलआउट की सामान्य नीति में ये चीज़ें शामिल हैं:

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

    बेहतर परफ़ॉर्मेंस के लिए, सेवा कॉलआउट के जवाबों को कैश मेमोरी में सेव भी किया जा सकता है. इसकी जानकारी, Apigee कम्यूनिटी थ्रेड में दी गई है: https://community.apigee.com/questions/34110/how-can-i-store-the-results-of-the-servicecallout.html.
  3. वैरिएबल एक्सट्रैक्ट करें नीति: आम तौर पर, ऐसा JSONPath या XPath एक्सप्रेशन तय करता है जो सेवा कॉलआउट से जनरेट किए गए मैसेज को पार्स करता है. इसके बाद, नीति ऐसे वैरिएबल सेट करती है जिनमें सर्विस कॉलआउट रिस्पॉन्स से पार्स की गई वैल्यू होती हैं.

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

कस्टम गड़बड़ी प्रबंधन

एलिमेंट का रेफ़रंस

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

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Remove>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
         </Remove>
         <Copy>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Copy>
        <Add>
            <Headers/>
            <QueryParams/>
            <FormParams/>
        </Add>
        <Set>
            <Headers/>
            <QueryParams/>
            <FormParams/>
            <Payload/>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Set>
    </Request>
    <Response>calloutResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
        <URL>http://example.com</URL>
        <LoadBalancer/>
        <SSLInfo/>
        <Properties/>
    </HTTPTargetConnection>
    <LocalTargetConnection>
        <APIProxy/>
        <ProxyEndpoint/>
        <Path/>
    </LocalTargetConnection>
</ServiceCallout>

<Service callout> एट्रिब्यूट

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">

इस टेबल में उन एट्रिब्यूट के बारे में बताया गया है जो नीति के सभी पैरंट एलिमेंट के लिए एक जैसे होते हैं:

एट्रिब्यूट ब्यौरा डिफ़ॉल्ट मौजूदगी
name

नीति का अंदरूनी नाम. name एट्रिब्यूट की वैल्यू में अक्षर, संख्याएं, स्पेस, हाइफ़न, अंडरस्कोर, और पीरियड शामिल किए जा सकते हैं. इस वैल्यू में 255 से ज़्यादा वर्ण नहीं हो सकते.

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

लागू नहीं ज़रूरी है
continueOnError

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

किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, true पर सेट करें.

false ज़रूरी नहीं
enabled

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

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

सही ज़रूरी नहीं
async

यह एट्रिब्यूट अब काम नहीं करता.

false बहिष्कृत

<DisplayName> एलिमेंट

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

<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट

लागू नहीं

अगर इस एलिमेंट को छोड़ दिया जाता है, तो नीति के name एट्रिब्यूट की वैल्यू का इस्तेमाल किया जाता है.

मौजूदगी ज़रूरी नहीं
Type String

<Request> एलिमेंट

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

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Remove>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Remove>
    <Copy>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Copy>
    <Add>
        <Headers/>
        <QueryParams/>
        <FormParams/>
    </Add>
    <Set>
        <Headers/>
        <QueryParams/>
        <FormParams/>
        <Payload/>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Set>
</Request>

<Remove>, <कॉपी>, <Add>, और <Set> टैग के लिए सिंटैक्स, मैसेज की नीति असाइन करने के लिए एक जैसे होते हैं.

अगर अनुरोध का मैसेज हल नहीं किया जा सकता या अनुरोध का मैसेज अमान्य है, तो नीति गड़बड़ी का मैसेज दिखाती है.

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

<Request clearPayload="true" variable="myRequest"/>

इसके अलावा, बाहरी सेवा को भेजे गए अनुरोध के मैसेज को, सेवा कॉलआउट की नीति में शामिल किया जा सकता है:

<Request>
  <Set>
    <Headers>
      <Header name="Accept">application/json</Header>
    </Headers>
    <Verb>POST</Verb>
    <Payload contentType="application/json">{"message":"my test message"}</Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
डिफ़ॉल्ट अनुरोध एलिमेंट या उसके किसी भी एट्रिब्यूट को छोड़ने पर, Edge इन डिफ़ॉल्ट वैल्यू को असाइन करता है:

<अनुरोध clearPayload="true" वैरिएबल="servicecallout.request"/>

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

अगर डेटा मास्किंग का इस्तेमाल किया जा रहा है, तो इस डिफ़ॉल्ट नाम के बारे में जानना ज़रूरी है -- अगर वैरिएबल के नाम को छोड़ दिया जाता है, तो आपको अपने मास्क कॉन्फ़िगरेशन में servicecallout.request जोड़ना होगा. उदाहरण के लिए, अगर आपको ऑथराइज़ेशन हेडर को मास्क करना है, ताकि यह ट्रेस सेशन में न दिखे, तो डिफ़ॉल्ट नाम को कैप्चर करने के लिए, आपको मास्किंग कॉन्फ़िगरेशन में इन्हें जोड़ना होगा:

servicecallout.request.header.Authorization.

मौजूदगी ज़रूरी नहीं.
स्ट्रीम किस तरह की है लागू नहीं

एट्रिब्यूट

एट्रिब्यूट ब्यौरा डिफ़ॉल्ट मौजूदगी
वैरिएबल

उस वैरिएबल का नाम जिसमें अनुरोध किया गया मैसेज होगा.

servicecallout.request ज़रूरी नहीं
clearPayload

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

clearPayload विकल्प को सिर्फ़ तब 'गलत' पर सेट करें, जब सेवा कॉलआउट लागू होने के बाद, अनुरोध के मैसेज की ज़रूरत हो.

सही ज़रूरी नहीं

<Request>/<ignoreUnresolvedVariables> एलिमेंट

सही पर सेट होने पर, नीति अनुरोध में ऐसी वैरिएबल गड़बड़ी को अनदेखा कर देती है जिसे ठीक नहीं किया गया हो.

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request> 
डिफ़ॉल्ट false
मौजूदगी ज़रूरी नहीं
स्ट्रीम किस तरह की है बूलियन

<Response> एलिमेंट

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

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

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

 <Response>calloutResponse</Response> 
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी नहीं
स्ट्रीम किस तरह की है स्ट्रिंग

<Timeout> एलिमेंट

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

<Timeout>30000</Timeout>
डिफ़ॉल्ट 55,000 मिलीसेकंड (55 सेकंड), Apigee Edge के लिए डिफ़ॉल्ट एचटीटीपी टाइम आउट सेटिंग
मौजूदगी ज़रूरी नहीं
स्ट्रीम किस तरह की है पूर्णांक

<HTTPTargetConnection> एलिमेंट

यह यूआरएल, TLS/एसएसएल, और एचटीटीपी प्रॉपर्टी जैसे ट्रांसपोर्ट की जानकारी देता है. <TargetEndpoint> कॉन्फ़िगरेशन रेफ़रंस देखें.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <LoadBalancer/>
    <SSLInfo/>
    <Properties/>
</HTTPTargetConnection>
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी है
स्ट्रीम किस तरह की है लागू नहीं

<HTTPTargetConnection>/<URL> एलिमेंट

जिस सेवा को कॉल किया जा रहा है उसका यूआरएल:

<HTTPTargetConnection>
    <URL>http://example.com</URL>
</HTTPTargetConnection>

वैरिएबल के साथ, यूआरएल का कुछ हिस्सा डाइनैमिक तौर पर दिया जा सकता है. हालांकि, नीचे दिए गए यूआरएल के प्रोटोकॉल वाले हिस्से, http:// को, वैरिएबल से नहीं दिखाया जा सकता. अगले उदाहरण में, क्वेरी पैरामीटर की वैल्यू बताने के लिए वैरिएबल का इस्तेमाल किया गया है:

<URL>http://example.com/forecastrss?w=${request.header.woeid}</URL>

या, यूआरएल पाथ के किसी हिस्से को वैरिएबल के साथ सेट करें:

<URL>http://example.com/{request.resourcePath}?w=${request.header.woeid}</URL>

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

<URL>http://{request.dom_port}/{request.resourcePath}</URL>
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी है
स्ट्रीम किस तरह की है स्ट्रिंग

<HTTPTargetConnection>/<SSLInfo> एलिमेंट

बैकएंड सेवा के लिए TLS/एसएसएल कॉन्फ़िगरेशन. TLS/एसएसएल कॉन्फ़िगरेशन से जुड़ी मदद पाने के लिए, एपीआई प्रॉक्सी कॉन्फ़िगरेशन रेफ़रंस में, एज से बैकएंड (क्लाउड और प्राइवेट क्लाउड) में TLS को कॉन्फ़िगर करना और एपीआई प्रॉक्सी कॉन्फ़िगरेशन के रेफ़रंस में, "TLS/एसएसएल टारगेटएंडपॉइंट कॉन्फ़िगरेशन" को देखें.

<HTTPTargetConnection>
    <URL>https://example.com</URL>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <KeyStore>ref://mykeystoreref</KeyStore>  ## Use of a reference is recommended
        <KeyAlias>myKey</KeyAlias>
        <TrustStore>myTruststore</TrustStore>
        <Ciphers/>
        <Protocols/>
    </SSLInfo>
</HTTPTargetConnection>
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी नहीं
स्ट्रीम किस तरह की है लागू नहीं

<HTTPTargetConnection>/<Properties> एलिमेंट

बैकएंड सेवा में एचटीटीपी ट्रांसपोर्ट प्रॉपर्टी. ज़्यादा जानकारी के लिए, एंडपॉइंट की प्रॉपर्टी का रेफ़रंस देखें.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <Properties>
        <Property name="allow.http10">true</Property>
        <Property name="request.retain.headers">
          User-Agent,Referer,Accept-Language
        </Property>
    </Properties>
</HTTPTargetConnection>
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी नहीं
स्ट्रीम किस तरह की है लागू नहीं

<HTTPTargetConnection>/<LoadGoalr> एलिमेंट

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

<HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="httpbin"/> <Server name="yahoo"/> </LoadBalancer> <Path>/get</Path> </HTTPTargetConnection>
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी नहीं
स्ट्रीम किस तरह की है लागू नहीं

<LocalTargetConnection> एलिमेंट

यह नीति स्थानीय प्रॉक्सी -- यानी उसी संगठन और एनवायरमेंट की प्रॉक्सी के बारे में बताती है जिसका लक्ष्य सेवा कॉलआउट है.

टारगेट के बारे में ज़्यादा जानकारी देने के लिए, <APIProxy> और <ProxyEndpoint> एलिमेंट या <Path> एलिमेंट का इस्तेमाल करें.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
   <Path/>
</LocalTargetConnection>
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी है
स्ट्रीम किस तरह की है लागू नहीं

<LocalTargetConnection>/<APIप्रॉक्सी> एलिमेंट

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

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

<APIProxy> एलिमेंट के साथ-साथ, <ProxyEndpoint> एलिमेंट शामिल करें, ताकि कॉल के लिए टारगेट किए जाने वाले प्रॉक्सी एंडपॉइंट का नाम तय किया जा सके.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
</LocalTargetConnection> 
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी है
स्ट्रीम किस तरह की है स्ट्रिंग

<LocalTargetConnection>/<प्रॉक्सीEndpoint> एलिमेंट

प्रॉक्सी एंडपॉइंट का नाम जिसे कॉल का लक्ष्य होना चाहिए. यह एपीआई प्रॉक्सी में एक प्रॉक्सी एंडपॉइंट है, जिसके बारे में <APIProxy> एलिमेंट से बताया गया है.

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी नहीं
स्ट्रीम किस तरह की है लागू नहीं

<LocalTargetConnection>/<Path> एलिमेंट

उस एंडपॉइंट का पाथ जिसे टारगेट किया जा रहा है. एंडपॉइंट को उसी संगठन और एनवायरमेंट की प्रॉक्सी की जानकारी देनी चाहिए जिसके लिए कॉल किया जा रहा है.

अगर आपको प्रॉक्सी का नाम नहीं पता है या उस पर भरोसा नहीं हो पा रहा है, तो <APIProxy>/<ProxyEndpoint> पेयर के बजाय इसका इस्तेमाल करें. पाथ एक भरोसेमंद टारगेट हो सकता है.

<LocalTargetConnection>
   <Path>/data-manager</Path>
</LocalTargetConnection>
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी नहीं
स्ट्रीम किस तरह की है लागू नहीं

स्कीमा

फ़्लो वैरिएबल

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

सेवा कॉलआउट का अपना अनुरोध और रिस्पॉन्स होता है. साथ ही, वैरिएबल की मदद से उस डेटा को ऐक्सेस किया जा सकता है. मुख्य मैसेज में request.* और response.* वैरिएबल प्रीफ़िक्स का इस्तेमाल किया गया है. इसलिए, सेवा कॉलआउट के हिसाब से खास मैसेज डेटा पाने के लिए, myrequest.* और calloutResponse.* प्रीफ़िक्स (सेवा कॉलआउट कॉन्फ़िगरेशन में डिफ़ॉल्ट) का इस्तेमाल करें. नीचे दी गई टेबल के पहले उदाहरण में दिखाया गया है कि सेवा कॉलआउट में आपको एचटीटीपी हेडर कैसे दिखेंगे.

वैरिएबल ब्यौरा

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

calloutResponse.header.HeaderName

myRequest.header.HeaderName

जहां calloutResponse, सर्विस कॉलआउट में रिस्पॉन्स के लिए वैरिएबल का नाम है और calloutResponse, अनुरोध के लिए वैरिएबल नाम है. उदाहरण के लिए:

calloutResponse.header.Content-Length

यह फ़ंक्शन कॉल आउट रिस्पॉन्स के कॉन्टेंट की लंबाई वाले हेडर को दिखाता है.

दायरा: सेवा कॉलआउट से, फ़ॉरवर्ड किए जाने वाले आइटम
टाइप: स्ट्रिंग
अनुमति: पढ़ें/लिखें

सेवा कॉलआउट के अनुरोध या जवाब में मौजूद मैसेज का हेडर. उदाहरण के लिए, अगर एपीआई प्रॉक्सी टारगेट http://example.com और सेवा कॉलआउट टारगेट http://mocktarget.apigee.net है, तो ये वैरिएबल कॉलआउट के हेडर के तौर पर http://mocktarget.apigee.net है.

servicecallout.requesturi

दायरा: सेवा के कॉलआउट के अनुरोध से आगे की ओर
टाइप: स्ट्रिंग
अनुमति: पढ़ें/लिखें

Serviceकॉलआउट नीति के लिए TargetEndpoint यूआरआई. यूआरआई, TargetEndpoint यूआरएल होता है, जिसमें प्रोटोकॉल और डोमेन स्पेसिफ़िकेशन शामिल नहीं होते.

servicecallout.{policy-name}.target.url

दायरा: सेवा के कॉलआउट के अनुरोध से आगे की ओर
टाइप: स्ट्रिंग
अनुमति: पढ़ें/लिखें

सेवा कॉलआउट का टारगेट यूआरएल.

calloutResponse.content

जहां calloutResponse, सेवा कॉलआउट कॉन्फ़िगरेशन में <Response>वैरिएबल का नाम है.

दायरा: सेवा कॉलआउट के जवाब से फ़ॉरवर्ड करें
टाइप: स्ट्रिंग
अनुमति: पढ़ें/लिखें

सेवा के कॉलआउट से जवाब का मुख्य हिस्सा.

servicecallout.{policy-name}.expectedcn

दायरा: सेवा के कॉलआउट के अनुरोध से आगे की ओर
टाइप: स्ट्रिंग
अनुमति: पढ़ें/लिखें

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

servicecallout.{policy-name}.failed

दायरा: सेवा कॉलआउट के जवाब से आगे की ओर
टाइप: बूलियन
अनुमति: पढ़ें/लिखें

बूलियन से पता चलता है कि नीति कामयाब, गलत या नाकाम रही.

गड़बड़ियां

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

रनटाइम से जुड़ी गड़बड़ियां

नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.

गड़बड़ी का कोड एचटीटीपी कोड स्थिति वजह समाधान
steps.servicecallout.ExecutionFailed 500

यह गड़बड़ी तब हो सकती है, जब:

  • इस नीति में गलत या किसी और तरह से अमान्य इनपुट को हैंडल करने के लिए कहा जाता है.
  • बैकएंड टारगेट सेवा, डिफ़ॉल्ट रूप से गड़बड़ी की स्थिति (डिफ़ॉल्ट रूप से, 4xx या 5xx) दिखाती है.
steps.servicecallout.RequestVariableNotMessageType 500 नीति में बताया गया अनुरोध वैरिएबल, Message टाइप का नहीं है. उदाहरण के लिए, अगर यह कोई स्ट्रिंग है या बिना मैसेज वाला कोई और टाइप है, तो आपको यह गड़बड़ी दिखेगी.
steps.servicecallout.RequestVariableNotRequestMessageType 500 नीति में बताया गया अनुरोध वैरिएबल, 'मैसेज का अनुरोध करें' टाइप का नहीं है. उदाहरण के लिए, अगर यह रिस्पॉन्स टाइप है, तो आपको यह गड़बड़ी दिखेगी.

डिप्लॉयमेंट से जुड़ी गड़बड़ियां

ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाले किसी प्रॉक्सी को डिप्लॉय किया जाता है.

गड़बड़ी का नाम वजह समाधान
URLMissing <HTTPTargetConnection> में <URL> एलिमेंट मौजूद नहीं है या खाली है.
ConnectionInfoMissing यह गड़बड़ी तब होती है, जब नीति में <HTTPTargetConnection> या <LocalTargetConnection> एलिमेंट न हो.
InvalidTimeoutValue यह गड़बड़ी तब होती है, जब <Timeout> की वैल्यू नेगेटिव या शून्य होती है.

गड़बड़ी वाले वैरिएबल

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

वैरिएबल जगह उदाहरण
fault.name="fault_name" fault_name, गड़बड़ी का नाम है, जैसा कि ऊपर रनटाइम की गड़बड़ियां टेबल में दिया गया है. गड़बड़ी का नाम, गड़बड़ी के कोड का आखिरी हिस्सा होता है. fault.name = "RequestVariableNotMessageType"
servicecallout.policy_name.failed policy_name, उस नीति का उपयोगकर्ता तय किया गया नाम है जिसकी वजह से गड़बड़ी हुई है. servicecallout.SC-GetUserData.failed = true

गड़बड़ी के जवाब का उदाहरण

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.servicecallout.RequestVariableNotMessageType"
      },
      "faultstring":"ServiceCallout[ServiceCalloutGetMockResponse]: 
            request variable data_str value is not of type Message"
   }
}

गड़बड़ी के नियम का उदाहरण

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="RequestVariableNotMessageType">
    <Step>
        <Name>AM-RequestVariableNotMessageType</Name>
    </Step>
    <Condition>(fault.name = "RequestVariableNotMessageType")</Condition>
</FaultRule>

मिलते-जुलते विषय