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

आपको 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 नाम के वैरिएबल से निकाला जाता है. यह कॉन्टेंट, उदाहरण के लिए, Tasks मैसेज की नीति से अपने-आप जानकारी भर जाती है. जवाब वाला मैसेज इन्हें असाइन किया गया है: GeocodingResponse नाम का वैरिएबल, जहां यह एक 'वैरिएबल निकालें' नीति या JavaScript में लिखे गए कस्टम कोड के ज़रिए पार्स किए जाने के लिए उपलब्ध है या Java का इस्तेमाल करें. यह नीति, Google Geocoding API से जवाब मिलने के लिए 30 सेकंड तक इंतज़ार करती है समय खत्म हो रहा है.

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

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

<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 या एसएएमएल एक्सप्रेशन को तय करता है जो जनरेट किए गए मैसेज को पार्स करता है सेवा कॉलआउट की मदद से. इसके बाद नीति, सेवा कॉल आउट जवाब.

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

कस्टम गड़बड़ी मैनेज करना

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

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

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

&lt;ServiceCallout&gt; एट्रिब्यूट

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

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

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

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

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

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

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

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

गलत वैकल्पिक
enabled

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

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

सही वैकल्पिक
async

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

गलत बहिष्कृत

&lt;DisplayName&gt; एलिमेंट

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

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

लागू नहीं

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

मौजूदगी वैकल्पिक
टाइप स्ट्रिंग

&lt;Request&gt; एलिमेंट

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

<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> टैग का सिंटैक्स वही होता है जो मैसेज असाइन करें नीति पढ़ें.

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

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

<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 डिफ़ॉल्ट वैल्यू नीचे दी गई हैं:

&lt;Request clearPayload=&quot;true&quot; variable=&quot;servicecallout.request&quot;/&gt;

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

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

servicecallout.request.header.Authorization.

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

विशेषताएं

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

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

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

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

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

सही वैकल्पिक

&lt;Request&gt;/&lt;IgnoreUnresolvedVariables&gt; एलिमेंट

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

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

&lt;Response&gt; एलिमेंट

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

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

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

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

<समय खत्म> एलिमेंट

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

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

&lt;HTTPTargetConnection&gt; एलिमेंट

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

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

&lt;HTTPTargetConnection&gt;/&lt;URL&gt; एलिमेंट

जिस सेवा को कॉल किया जा रहा है उसका 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>
डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी है
स्ट्रीम किस तरह की है स्ट्रिंग

&lt;HTTPTargetConnection&gt;/&lt;SSLInfo&gt; एलिमेंट

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

&lt;HTTPTargetConnection&gt;/&lt;Properties&gt; एलिमेंट

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

<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>
डिफ़ॉल्ट लागू नहीं
मौजूदगी वैकल्पिक
स्ट्रीम किस तरह की है लागू नहीं

&lt;HTTPTargetConnection&gt;/&lt;LoadBalancer&gt; एलिमेंट

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

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

&lt;LocalTargetConnection&gt; एलिमेंट

लोकल प्रॉक्सी तय करता है -- जो उसी संगठन और एनवायरमेंट में मौजूद प्रॉक्सी होती है -- जो सेवा के कॉलआउट का टारगेट.

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

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

&lt;LocalTargetConnection&gt;/&lt;APIProxy&gt; एलिमेंट

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

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

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

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

&lt;LocalTargetConnection&gt;/&lt;ProxyEndpoint&gt; एलिमेंट

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

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

&lt;LocalTargetConnection&gt;/&lt;Path&gt; एलिमेंट

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

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

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

स्कीमा

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

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

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

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

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

calloutResponse.header.HeaderName

myRequest.header.HeaderName

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

calloutResponse.header.Content-Length

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

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

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

servicecallout.requesturi

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

सर्विसकॉलआउट नीति के लिए TargetEndpoint यूआरआई. यूआरआई, TargetEndpoint का यूआरएल होता है तय नहीं किया जा सकता.

servicecallout.{policy-name}.target.url

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

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

calloutResponse.content

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

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

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

servicecallout.{policy-name}.expectedcn

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

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

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>

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