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

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

क्या

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

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

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

नमूने

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

<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

अनुरोध ऑब्जेक्ट बनाने के लिए, Assign Message जैसी नीति का इस्तेमाल करने के बजाय, इसे सीधे तौर पर Service Callout नीति में तय किया जा सकता है. इस उदाहरण में, सेवा कॉलआउट नीति बाहरी सेवा को पास किए गए तीन क्वेरी पैरामीटर की वैल्यू सेट करती है. सर्विस कॉलआउट नीति में, पूरा अनुरोध मैसेज बनाया जा सकता है. इसमें पेलोड, एन्कोडिंग टाइप (जैसे कि 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 नाम के वैरिएबल को असाइन किया जाता है. यहां यह Extract Variables नीति के ज़रिए पार्स किया जा सकता है. इसके अलावा, इसे JavaScript या Java में लिखे गए कस्टम कोड के ज़रिए भी पार्स किया जा सकता है. यह नीति, Google Geocoding API से जवाब मिलने के लिए 30 सेकंड तक इंतज़ार करती है. इसके बाद, यह टाइम आउट हो जाती है.

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

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

<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>

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


सेवा कॉलआउट एक्सटेंशन से जुड़ी नीति के बारे में जानकारी

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

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

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

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

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

    बेहतर परफ़ॉर्मेंस के लिए, Service Callout के जवाबों को भी कैश मेमोरी में सेव किया जा सकता है. इसके बारे में Apigee Community के इस थ्रेड में बताया गया है: How can I store the results of the ServiceCallout policy in cache and later retrieve it from cache?.
  3. Extract Variables policy: आम तौर पर, यह JSONPath या XPath एक्सप्रेशन को तय करता है. यह एक्सप्रेशन, Service Callout से जनरेट हुए मैसेज को पार्स करता है. इसके बाद, नीति ऐसे वैरिएबल सेट करती है जिनमें सर्विस कॉलआउट के रिस्पॉन्स से पार्स की गई वैल्यू शामिल होती हैं.

Service Callout नीति के साथ-साथ Assign Message और Extract Variables नीतियों का इस्तेमाल करने वाली पूरी एपीआई प्रॉक्सी का सैंपल देखने के लिए, नीति कंपोज़िशन का इस्तेमाल करना लेख पढ़ें.

गड़बड़ी को ठीक करने के लिए कस्टम कोड

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

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

<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>

<ServiceCallout> एट्रिब्यूट

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

The following table describes attributes that are common to all policy parent elements:

Attribute Description Default Presence
name

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Optional
async

This attribute is deprecated.

false Deprecated

<DisplayName> element

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, natural-language name.

<DisplayName>Policy Display Name</DisplayName>
Default

N/A

If you omit this element, the value of the policy's name attribute is used.

Presence Optional
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>, <Copy>, <Add>, और <Set> टैग का सिंटैक्स, Assign Message policy के सिंटैक्स जैसा ही होता है.

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

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

<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>
डिफ़ॉल्ट अगर आपने Request एलिमेंट या उसके किसी एट्रिब्यूट को शामिल नहीं किया है, तो Edge इन डिफ़ॉल्ट वैल्यू को असाइन करता है:

<Request clearPayload="true" variable="servicecallout.request"/>

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

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

servicecallout.request.header.Authorization.

उपलब्धता ज़रूरी नहीं.
समस्या लागू नहीं

विशेषताएं

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

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

servicecallout.request वैकल्पिक
clearPayload

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

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

सही वैकल्पिक

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

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

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
डिफ़ॉल्ट गलत
उपलब्धता वैकल्पिक
समस्या बूलियन

<Response> एलिमेंट

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

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

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

 <Response>calloutResponse</Response>
डिफ़ॉल्ट NA
उपलब्धता वैकल्पिक
समस्या स्ट्रिंग

<Timeout> एलिमेंट

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

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

<HTTPTargetConnection> एलिमेंट

यह ट्रांसपोर्ट की जानकारी देता है. जैसे, यूआरएल, टीएलएस/एसएसएल, और एचटीटीपी प्रॉपर्टी. <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/एसएसएल कॉन्फ़िगरेशन से जुड़ी मदद के लिए, Edge से बैकएंड (क्लाउड और प्राइवेट क्लाउड) तक TLS कॉन्फ़िगर करना और एपीआई प्रॉक्सी कॉन्फ़िगरेशन रेफ़रंस में "TLS/एसएसएल TargetEndpoint कॉन्फ़िगरेशन" देखें.

देखें.
<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>/<LoadBalancer> एलिमेंट

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

<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>/<APIProxy> एलिमेंट

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

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

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

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
</LocalTargetConnection>
डिफ़ॉल्ट लागू नहीं
उपलब्धता ज़रूरी है
समस्या स्ट्रिंग

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

उस प्रॉक्सी एंडपॉइंट का नाम जिसे कॉल का टारगेट बनाया जाना चाहिए. यह <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, सर्विस कॉलआउट में मौजूद रिस्पॉन्स के लिए वैरिएबल का नाम है. वहीं, myRequest, अनुरोध के लिए वैरिएबल का नाम है. उदाहरण के लिए:

calloutResponse.header.Content-Length

यह फ़ंक्शन, Service Callout रिस्पॉन्स का Content-Length हेडर दिखाता है.

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

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

servicecallout.requesturi

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

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

servicecallout.{policy-name}.target.url

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

सेवा के बारे में जानकारी देने वाले कॉलआउट के लिए टारगेट यूआरएल.

calloutResponse.content

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

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

यह सर्विस कॉलआउट से मिले जवाब की बॉडी होती है.

servicecallout.{policy-name}.expectedcn

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

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

servicecallout.{policy-name}.failed

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

बूलियन, जिससे यह पता चलता है कि नीति लागू हुई या नहीं. अगर नीति लागू हुई, तो वैल्यू 'गलत है' होगी. अगर नीति लागू नहीं हुई, तो वैल्यू 'सही है' होगी.

गड़बड़ियां

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.servicecallout.ExecutionFailed 500

This error can occur when:

  • the policy is asked to handle input that is malformed or otherwise invalid.
  • the backend target service returns an error status (by default, 4xx or 5xx).
steps.servicecallout.RequestVariableNotMessageType 500 The Request variable specified in the policy is not of type Message. For example, if it's a string or other non-message type, you'll see this error.
steps.servicecallout.RequestVariableNotRequestMessageType 500 The Request variable specified in the policy is not of type Request Message. For example, if it's a Response type, you'll see this error.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
URLMissing The <URL> element inside <HTTPTargetConnection> is missing or empty.
ConnectionInfoMissing This error happens if the policy does not have an <HTTPTargetConnection> or <LocalTargetConnection> element.
InvalidTimeoutValue This error happens if the <Timeout> value is negative or zero.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name = "RequestVariableNotMessageType"
servicecallout.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. servicecallout.SC-GetUserData.failed = true

Example error response

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

Example fault rule

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

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