ServiceCallout নীতি

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

কী

পরিষেবা কলআউট নীতি আপনাকে API প্রক্সি ফ্লো থেকে অন্য পরিষেবায় কল করতে দেয়। আপনি কোনও এক্সটার্নাল পরিষেবা (যেমন, এক্সটার্নাল RESTful পরিষেবা এন্ডপয়েন্ট) অথবা ইন্টার্নাল পরিষেবায় (যেমন, একই সংস্থা ও এনভায়রনমেন্টে API প্রক্সি) কলআউট করতে পারেন।

  • এক্সটার্নাল ব্যবহারের ক্ষেত্রে, আপনি থার্ড-পার্টি API-তে কলআউট করেন যা আপনার প্রক্সি থেকে এক্সটার্নাল। থার্ড-পার্টি API থেকে পাওয়া উত্তর পার্স করা হয় এবং আপনার API-এর উত্তরে মেসেজে যোগ করা হয়, এর ফলে অ্যাপের ব্যবহারকারীদের জন্য ডেটা আরও সমৃদ্ধ ও "ম্যাশ-আপ" হয়ে যায়। এছাড়াও, আপনি অনুরোধ ফ্লোতে সার্ভিস কলআউট নীতি ব্যবহার করে অনুরোধ করতে পারেন, তারপর API প্রক্সির TargetEndpoint-এ প্রতিক্রিয়াতে তথ্য পাস করতে পারেন।
  • আরেকটি ব্যবহারের ক্ষেত্রে, আপনি এমন একটি প্রক্সি কল করেন যা আপনি যে প্রক্সি থেকে কল করছেন সেটির মতো একই সংস্থা এবং এনভায়রনমেন্টে রয়েছে। যেমন, আপনার কাছে এমন একটি প্রক্সি থাকলে, আপনি এটি কার্যকর বলে মনে করতে পারেন যা কিছু ডিসক্রিট লো-লেভেল ফাংশনালিটি অফার করে যা এক বা একাধিক অন্যান্য প্রক্সি ব্যবহার করবে। যেমন, কোনও ব্যাকএন্ড ডেটা স্টোরের সাথে ক্রিয়েট/রিড/আপডেট/ডিলিট অপারেশন এক্সপোজ করে এমন কোনও প্রক্সি অন্যান্য একাধিক প্রক্সির টার্গেট প্রক্সি হতে পারে যা ক্লায়েন্টদের কাছে ডেটা এক্সপোজ করে।

এই নীতি HTTP ও HTTPS-এর মাধ্যমে করা অনুরোধ গ্রহণ করে।

নমুনা

ইন্টার্নাল প্রক্সিতে লোকাল কল

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

এই উদাহরণে একটি লোকাল API প্রক্সি (অর্থাৎ, একই সংস্থা ও এনভায়রনমেন্টে থাকা) data-manager-কে কলআউট করা হয়েছে, যার প্রক্সি এন্ডপয়েন্ট নির্দিষ্ট করা হয়েছে এবং সেটির নাম default।

ভেরিয়েবেল হিসেবে URL

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

এই উদাহরণে, টার্গেটের URL ডায়নামিক পদ্ধতিতে পূরণ করার জন্য URL-এ একটি ভেরিয়েবল ব্যবহার করা হয়েছে। URL-এর প্রোটোকল অংশ, http://, কোনও ভেরিয়েবল দিয়ে নির্দিষ্ট করা যায় না। এছাড়াও, আপনাকে URL-এর ডোমেন অংশের জন্য আলাদা ভেরিয়েবল এবং URL-এর বাকি অংশের জন্য আলাদা ভেরিয়েবল ব্যবহার করতে হবে।

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 জিওকোডিং API-এর থেকে উত্তর পাওয়ার জন্য নীতিটি ৩০ সেকেন্ড অপেক্ষা করে।

এই উদাহরণ পরিষেবা কলআউট ব্যবহার করে এমন সম্পূর্ণ স্যাম্পেল API প্রক্সি পেতে, সাথে অ্যাসাইন মেসেজ ও এক্সট্র্যাক্ট ভেরিয়েবল নীতি, নীতি কম্পোজিশন ব্যবহার করা দেখুন।

টার্গেট সার্ভারে কল করা

<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" নামের দুটি টার্গেট সার্ভারে লোড ডিস্ট্রিবিউট করা হয়েছে। আপনার প্রক্সির জন্য টার্গেট সার্ভার সেট-আপ করা এবং লোড ব্যালেন্সিং কনফিগার করা সম্পর্কে তথ্য পেতে, ব্যাকএন্ড সার্ভার জুড়ে লোড ব্যালেন্সিং দেখুন।


পরিষেবা কলআউট নীতি সম্পর্কে

এমন অনেক পরিস্থিতি আছে যেখানে আপনি API প্রক্সিতে পরিষেবা কলআউট নীতি ব্যবহার করতে পারেন। যেমন, আপনি API প্রক্সি কনফিগার করতে পারেন যাতে সেটি এক্সটার্নাল পরিষেবায় কল করে জিওলোকেশন ডেটা, গ্রাহকের রিভিউ, পার্টনারের রিটেল ক্যাটালগ থেকে আইটেম ইত্যাদি ডেলিভার করতে পারে।

কলআউট সাধারণত আরও দুটি নীতির সাথে ব্যবহার করা হয়: মেসেজ অ্যাসাইন করা ও ভেরিয়েবল এক্সট্র্যাক্ট করা।

  • অনুরোধ: অ্যাসাইন মেসেজ, রিমোট পরিষেবায় পাঠানো অনুরোধ মেসেজ পূরণ করে।
  • উত্তর: Extract Variables, উত্তর পার্স করে এবং নির্দিষ্ট কন্টেন্ট এক্সট্র্যাক্ট করে।

সাধারণত, পরিষেবা কলআউট নীতিতে এগুলি থাকে:

  1. Assign Message policy: অনুরোধ মেসেজ তৈরি করে, HTTP হেডার, কোয়েরি প্যারামিটার পূরণ করে, HTTP ক্রিয়া ইত্যাদি সেট করে।
  2. পরিষেবা কলআউট নীতি: Assign Message নীতি দ্বারা তৈরি মেসেজকে রেফার করে, এক্সটার্নাল কলের জন্য টার্গেট URL নির্ধারণ করে এবং টার্গেট পরিষেবা দ্বারা রিটার্ন করা রেসপন্স অবজেক্টের নাম নির্ধারণ করে।

    পারফর্ম্যান্স উন্নত করতে, আপনি সার্ভিস কলআউট রেসপন্সও ক্যাশে করতে পারেন, যেমন এই Apigee কমিউনিটি থ্রেডে বর্ণনা করা হয়েছে: আমি কীভাবে ক্যাশেতে ServiceCallout নীতির ফলাফল স্টোর করতে পারি এবং পরে ক্যাশে থেকে তা রিট্রিভ করতে পারি?।
  3. এক্সট্র্যাক্ট ভেরিয়েবল নীতি: সাধারণত একটি JSONPath বা XPath এক্সপ্রেশনকে সংজ্ঞায়িত করে যা সার্ভিস কলআউট দ্বারা তৈরি করা মেসেজকে পার্স করে। তারপরে, নীতিটি এমন ভেরিয়েবল সেট করে যাতে সার্ভিস কলআউট রেসপন্স থেকে পার্স করা ভ্যালু থাকে।

সম্পূর্ণ স্যাম্পেল API প্রক্সি পেতে নীতি কম্পোজিশন ব্যবহার করা দেখুন, যা অ্যাসাইন মেসেজ এবং এক্সট্র্যাক্ট ভেরিয়েবল নীতির সাথে পরিষেবা কলআউট নীতি ব্যবহার করে।

কাস্টম সমস্যা ম্যানেজ করা

এলিমেন্ট রেফারেন্স

এই নীতিতে আপনি যেসব এলিমেন্ট ও অ্যাট্রিবিউট কনফিগার করতে পারবেন সেগুলি নিচে উল্লেখ করা হল:

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

নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
name

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<Request> এলিমেন্ট

API প্রক্সি থেকে অন্য পরিষেবায় পাঠানো অনুরোধ মেসেজ যে ভেরিয়েবলে থাকে সেটি নির্দিষ্ট করে। ফ্লোতে আগের কোনও নীতির মাধ্যমে ভেরিয়েবল তৈরি করা যেতে পারে অথবা আপনি সার্ভিস কলআউট নীতিতে ইনলাইন হিসেবে এটি তৈরি করতে পারেন।

<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> ট্যাগের সিনট্যাক্স অ্যাসাইন মেসেজ নীতির মতো একই।

অনুরোধ মেসেজ সমাধান করা না গেলে বা সেটি ভুল অনুরোধ মেসেজ ধরনের হলে, নীতিটি একটি সমস্যা ফেরত দেয়।

সবচেয়ে সহজ উদাহরণে, আপনি এমন একটি ভেরিয়েবল পাস করেন যাতে অনুরোধ মেসেজ থাকে যা API প্রক্সি ফ্লোতে আগে পপুলেট করা হয়েছে:

<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 নীতি কার্যকর হলে প্রতিবার একটি নতুন অনুরোধ অবজেক্ট তৈরি হয়। এর অর্থ হল, অনুরোধ ও অনুরোধের URI পাথ কখনওই আবার ব্যবহার করা হয় না। দ্বিতীয়ত, ডিফল্ট ভেরিয়েবলের নাম, servicecallout.request, হল একটি সংরক্ষিত নাম যা অনুরোধে অ্যাসাইন করা হয় যদি আপনি কোনও নাম না দেন।

আপনি ডেটা মাস্কিং ব্যবহার করলে এই ডিফল্ট নাম সম্পর্কে জানা গুরুত্বপূর্ণ -- আপনি ভেরিয়েবলের নাম বাদ দিলে, আপনাকে মাস্ক কনফিগারেশনে servicecallout.request যোগ করতে হবে। যেমন, আপনি যদি Authorization হেডার মাস্ক করতে চান যাতে এটি Trace সেশনে দেখা না যায়, তাহলে ডিফল্ট নাম ক্যাপচার করতে আপনার মাস্কিং কনফিগারেশনে নিম্নলিখিতগুলি যোগ করবেন:

servicecallout.request.header.Authorization।

উপস্থিতি ঐচ্ছিক।
টাইপ করুন প্রযোজ্য নয়

অ্যাট্রিবিউট

অ্যাট্রিবিউট বিবরণ ডিফল্ট উপস্থিতি
পরিবর্তনযোগ্য

অনুরোধ মেসেজ থাকবে এমন ভেরিয়েবলের নাম।

servicecallout.request ঐচ্ছিক
clearPayload

true হলে, অনুরোধ মেসেজটি HTTP টার্গেটে পাঠানোর পরে, অনুরোধ মেসেজটি যে মেমরি ব্যবহার করে সেটি খালি করার জন্য অনুরোধ মেসেজটি যে ভেরিয়েবলে আছে সেটি মুছে দেওয়া হয়।

সার্ভিস কলআউট এক্সিকিউট করার পরে অনুরোধ মেসেজ প্রয়োজন হলে, তবেই clearPayload বিকল্পকে false হিসেবে সেট করুন।

সত্য ঐচ্ছিক

<Request>/<IgnoreUnresolvedVariables> এলিমেন্ট

true হিসেবে সেট করা থাকলে, নীতি অনুরোধে থাকা সমাধান না হওয়া ভেরিয়েবেল সংক্রান্ত সমস্যা উপেক্ষা করে।

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
ডিফল্ট মিথ্যা
উপস্থিতি ঐচ্ছিক
টাইপ করুন বুলিয়ান

<Response> এলিমেন্ট

API প্রক্সি লজিককে আরও প্রসেস করার জন্য রিমোট কল থেকে পাওয়া উত্তরের প্রয়োজন হলে এই এলিমেন্ট যোগ করুন।

এই এলিমেন্ট উপস্থিত থাকলে, এটি সেই ভেরিয়েবলের নাম নির্দিষ্ট করে যা এক্সটার্নাল পরিষেবা থেকে পাওয়া উত্তর মেসেজ কন্টেন করবে। নীতিটি সম্পূর্ণ উত্তরটি সঠিকভাবে পড়লে তবেই টার্গেট থেকে পাওয়া উত্তরটি ভেরিয়েবলে অ্যাসাইন করা হয়। কোনও কারণে রিমোট কল কাজ না করলে, নীতিটি একটি সমস্যা রিটার্ন করে।

এই এলিমেন্ট বাদ দেওয়া হলে, API প্রক্সি কোনও উত্তরের জন্য অপেক্ষা করে না; API প্রক্সি ফ্লো পরবর্তী ফ্লো ধাপের সাথে এক্সিকিউশন চালিয়ে যায়। এছাড়াও, এটি স্পষ্ট করে বলা প্রয়োজন যে, কোনও Response এলিমেন্ট না থাকলে, টার্গেটের উত্তর পরবর্তী ধাপের মাধ্যমে প্রসেস করার জন্য উপলভ্য থাকে না এবং রিমোট কলে কোনও সমস্যা হয়েছে কিনা তা প্রক্সি ফ্লোয়ের পক্ষে শনাক্ত করা সম্ভব হয় না। ServiceCallout ব্যবহার করার সময় Response এলিমেন্ট বাদ দেওয়ার একটি সাধারণ ব্যবহার: এক্সটার্নাল সিস্টেমে মেসেজ লগ করা।

 <Response>calloutResponse</Response>
ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং

<Timeout> এলিমেন্ট

সার্ভিস কলআউট নীতি টার্গেট থেকে উত্তর পাওয়ার জন্য যত মিলি সেকেন্ড অপেক্ষা করবে। আপনি রানটাইমে এই ভ্যালু ডায়নামিক হিসেবে সেট করতে পারবেন না। পরিষেবা কলআউট টাইম-আউট হলে, HTTP 500 রিটার্ন করা হয়, নীতি কাজ করে না এবং API প্রক্সি সমস্যাযুক্ত অবস্থায় চলে যায়, যেমন সমস্যা ম্যানেজ করা নিবন্ধে বর্ণনা করা হয়েছে।

<Timeout>30000</Timeout>
ডিফল্ট ৫৫০০০ মিলিসেকেন্ড (৫৫ সেকেন্ড), Apigee Edge-এর জন্য ডিফল্ট HTTP টাইম-আউট সেটিং
উপস্থিতি ঐচ্ছিক
টাইপ করুন পূর্ণসংখ্যা

<HTTPTargetConnection> এলিমেন্ট

URL, TLS/SSL ও HTTP প্রপার্টির মতো ট্রান্সপোর্ট সংক্রান্ত বিবরণ প্রদান করে। <TargetEndpoint> কনফিগারেশন রেফারেন্স দেখুন।

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <LoadBalancer/>
    <SSLInfo/>
    <Properties/>
</HTTPTargetConnection>
ডিফল্ট প্রযোজ্য নয়
উপস্থিতি প্রয়োজনীয়
টাইপ করুন প্রযোজ্য নয়

<HTTPTargetConnection>/<URL> এলিমেন্ট

যে পরিষেবা কল করা হচ্ছে তার URL:

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

আপনি কোনও ভেরিয়েবলের সাহায্যে URL-এর অংশ ডাইনামিক উপায়ে সাপ্লাই করতে পারবেন। তবে, নিচে দেওয়া URL-এর প্রোটোকল অংশ, http:// কোনও ভেরিয়েবল দিয়ে নির্দিষ্ট করা যাবে না। পরের উদাহরণে, আপনি কোয়েরি প্যারামিটারের ভ্যালু নির্দিষ্ট করতে একটি ভেরিয়েবল ব্যবহার করেছেন:

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

অথবা, ভেরিয়েবল সহ URL পাথের একটি অংশ সেট করুন:

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

URL-এর ডোমেন ও পোর্ট নির্দিষ্ট করার জন্য আপনি কোনও ভেরিয়েবল ব্যবহার করতে চাইলে, শুধুমাত্র ডোমেন ও পোর্টের জন্য একটি ভেরিয়েবল এবং URL-এর অন্য অংশের জন্য দ্বিতীয় ভেরিয়েবল ব্যবহার করুন:

<URL>http://{request.dom_port}/{request.resourcePath}</URL>
ডিফল্ট প্রযোজ্য নয়
উপস্থিতি প্রয়োজনীয়
টাইপ করুন স্ট্রিং

<HTTPTargetConnection>/<SSLInfo> এলিমেন্ট

ব্যাকএন্ড পরিষেবার TLS/SSL কনফিগারেশন। TLS/SSL কনফিগারেশন সংক্রান্ত সাহায্যের জন্য, এজ থেকে ব্যাকএন্ডে (ক্লাউড ও প্রাইভেট ক্লাউড) TLS কনফিগার করাএবং API প্রক্সি কনফিগারেশন রেফারেন্স-এ "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>
ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন প্রযোজ্য নয়

<HTTPTargetConnection>/<Properties> এলিমেন্ট

ব্যাকএন্ড পরিষেবায় HTTP ট্রান্সপোর্ট প্রপার্টি। আরও তথ্যের জন্য, দেখুন এন্ডপয়েন্ট প্রপার্টি রেফারেন্স।

<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> এলিমেন্ট

স্থানীয় কলের টার্গেট API প্রক্সির নাম। কল করা প্রক্সি এবং প্রক্সিটি একই সংস্থা ও এনভায়রনমেন্টে থাকতে হবে।

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

<APIProxy> এলিমেন্টের সাথে, কলের জন্য টার্গেট করা উচিত এমন প্রক্সি এন্ডপয়েন্টের নাম নির্দিষ্ট করতে <ProxyEndpoint> এলিমেন্ট যোগ করুন।

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
</LocalTargetConnection>
ডিফল্ট প্রযোজ্য নয়
উপস্থিতি প্রয়োজনীয়
টাইপ করুন স্ট্রিং

<LocalTargetConnection>/<ProxyEndpoint> এলিমেন্ট

কলের টার্গেট হিসেবে ব্যবহার করা উচিত এমন প্রক্সি এন্ডপয়েন্টের নাম। এটি হল <APIProxy> এলিমেন্ট দিয়ে নির্দিষ্ট করা API প্রক্সির একটি প্রক্সি এন্ডপয়েন্ট।

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>
ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন প্রযোজ্য নয়

<LocalTargetConnection>/<Path> এলিমেন্ট

টার্গেট করা হচ্ছে এমন এন্ডপয়েন্টের পাথ। কল করা প্রক্সি যে সংস্থা ও এনভায়রনমেন্টের, এন্ডপয়েন্টকেও সেই একই সংস্থার প্রক্সিকে রেফার করতে হবে।

প্রক্সি নাম সম্পর্কে না জানলে অথবা সেটির উপর ভরসা করতে না পারলে, <APIProxy>/<ProxyEndpoint> পেয়ারের পরিবর্তে এটি ব্যবহার করুন। পাথটি নির্ভরযোগ্য টার্গেট হতে পারে।

<LocalTargetConnection>
   <Path>/data-manager</Path>
</LocalTargetConnection>
ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন প্রযোজ্য নয়

স্কিমা

ফ্লো ভেরিয়েবল

HTTP হেডার, মেসেজ কন্টেন্ট বা Flow কনটেক্সটের উপর ভিত্তি করে, রানটাইমে Flow ভেরিয়েবল নীতি ও Flow-এর ডায়নামিক আচরণ চালু করে। কোনও সার্ভিস কলআউট নীতি কার্যকর হওয়ার পরে নিম্নলিখিত পূর্বনির্ধারিত Flow ভেরিয়েবল উপলভ্য হয়: ফ্লো ভেরিয়েবল সম্পর্কে আরও জানতে, ভেরিয়েবল রেফারেন্স দেখুন।

পরিষেবা কলআউটের নিজস্ব অনুরোধ ও উত্তর থাকে এবং আপনি ভেরিয়েবলের মাধ্যমে সেই ডেটা অ্যাক্সেস করতে পারবেন। মূল মেসেজে request.* এবং response.* ভেরিয়েবল প্রিফিক্স ব্যবহার করা হয়েছে, তাই myrequest.* এবং calloutResponse.* প্রিফিক্স (সার্ভিস কলআউট কনফিগারেশনে ডিফল্ট) ব্যবহার করে সার্ভিস কলআউট নির্দিষ্ট মেসেজ ডেটা পান। নিচের সারণীর প্রথম উদাহরণে দেখানো হয়েছে যে আপনি কীভাবে সার্ভিস কলআউটে HTTP হেডার পাবেন।

ভেরিয়েবেল বিবরণ

কীভাবে আপনি মূল অনুরোধ ও উত্তর থেকে হেডার পাবেন, তার মতো করে পরিষেবা কলআউট অনুরোধ ও উত্তর হেডার পাওয়ার একটি উদাহরণ নিচে দেওয়া হল ।

calloutResponse.header.HeaderName

myRequest.header.HeaderName

যেখানে calloutResponse হল Service Callout-এ উত্তরের ভেরিয়েবলের নাম এবং myRequest হল অনুরোধের ভেরিয়েবলের নাম। যেমন:

calloutResponse.header.Content-Length

পরিষেবা কলআউট উত্তরের Content-Length হেডার রিটার্ন করে।

স্কোপ: পরিষেবা কলআউট থেকে শুরু করে
টাইপ: স্ট্রিং
অনুমতি: পড়া/লেখা

পরিষেবা কলআউট অনুরোধ বা উত্তরে মেসেজ হেডার। যেমন, API প্রক্সি টার্গেট হল http://example.com এবং সার্ভিস কলআউট টার্গেট হল http://mocktarget.apigee.net, তাহলে এই ভেরিয়েবলগুলি হল http://mocktarget.apigee.net-এ কলআউটের হেডার।

servicecallout.requesturi

স্কোপ: পরিষেবা কলআউট অনুরোধ থেকে শুরু করে
টাইপ: স্ট্রিং
অনুমতি: রিড/রাইট

ServiceCallout নীতির জন্য TargetEndpoint URI. URI হল TargetEndpoint URL প্রোটোকল ও ডোমেন স্পেসিফিকেশন ছাড়া।

servicecallout.{policy-name}.target.url

স্কোপ: পরিষেবা কলআউট অনুরোধ থেকে শুরু করে
টাইপ: স্ট্রিং
অনুমতি: পড়া/লেখা

পরিষেবা কলআউটের জন্য টার্গেট URL.

calloutResponse.content

যেখানে calloutResponse হল <Response>ভেরিয়েবলের নাম পরিষেবা কলআউট কনফিগারেশনে।

স্কোপ: পরিষেবা কলআউট রেসপন্স থেকে শুরু করে
টাইপ: স্ট্রিং
অনুমতি: পড়া/লেখা

সার্ভিস কলআউট থেকে পাওয়া উত্তর।

servicecallout.{policy-name}.expectedcn

স্কোপ: পরিষেবা কলআউট অনুরোধ ফরওয়ার্ড করা থেকে
টাইপ: স্ট্রিং
অনুমতি: পড়া/লেখা

ServiceCallout নীতিতে উল্লেখ করা TargetEndpoint-এর প্রত্যাশিত সাধারণ নাম। TargetEndpoint TLS/SSL এন্ডপয়েন্টকে রেফার করলে তবেই এটি অর্থপূর্ণ হয়।

servicecallout.{policy-name}.failed

স্কোপ: পরিষেবা কলআউট রেসপন্স থেকে ফরওয়ার্ড করা হয়েছে
ধরন: বুলিয়ান
অনুমতি: পড়া/লেখা

নীতি প্রয়োগ করা গেছে, যায়নি বা বাতিল করা হয়েছে কিনা তা বোঝাতে বুলিয়ান মান, false বা true.

সমস্যা

এই নীতি কোনও সমস্যার কারণে ট্রিগার হলে, Edge-এর মাধ্যমে ফেরত আসা ফল্ট কোড ও সমস্যার মেসেজ এবং সেট করা ফল্ট ভেরিয়েবল সম্পর্কে এই বিভাগে বর্ণনা করা হয়েছে। সমস্যা সমাধানের জন্য আপনি যদি ফল্ট রুল ডেভেলপ করেন, তাহলে এই তথ্য জানা আপনার জন্য গুরুত্বপূর্ণ। আরও জানতে, নীতি সংক্রান্ত সমস্যা সম্পর্কে আপনার যা জানা প্রয়োজন এবং ত্রুটি মোকাবেলা করা দেখুন।

রানটাইম সমস্যা

নীতি এক্সিকিউট করার সময় এই সমস্যা হতে পারে।

সমস্যার কোড HTTP স্ট্যাটাস কারণ এর সমাধান করুন
steps.servicecallout.ExecutionFailed 500

এইসব কারণে সমস্যা হতে পারে:

  • নীতিকে ভুল বা অন্য কোনওভাবে অবৈধ ইনপুট হ্যান্ডেল করতে বলা হয়।
  • ব্যাকএন্ড টার্গেট পরিষেবা একটি সমস্যার স্ট্যাটাস (সাধারণত, 4xx বা 5xx) ফেরত দেয়।
steps.servicecallout.RequestVariableNotMessageType 500 নীতিতে উল্লেখ করা অনুরোধ ভেরিয়েবলটি মেসেজ ধরনের নয়। যেমন, যদি এটি কোনও স্ট্রিং বা অন্য কোনও নন-মেসেজ টাইপ হয়, তাহলে আপনি এই সমস্যা দেখতে পাবেন।
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>

সম্পর্কিত বিষয়