আপনি 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:// , একটি ভেরিয়েবল দ্বারা নির্দিষ্ট করা যাবে না। এছাড়াও, ইউআরএলের ডোমেন অংশ এবং বাকি ইউআরএলের জন্য আপনাকে অবশ্যই আলাদা ভেরিয়েবল ব্যবহার করতে হবে।
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
অনুরোধ অবজেক্ট তৈরি করতে বার্তা বরাদ্দ করার মতো নীতি ব্যবহার করার পরিবর্তে, আপনি সরাসরি পরিষেবা কলআউট নীতিতে এটি সংজ্ঞায়িত করতে পারেন। এই উদাহরণে, পরিষেবা কলআউট নীতি বহিরাগত পরিষেবাতে পাস করা তিনটি ক্যোয়ারী প্যারামিটারের মান সেট করে। আপনি পরিষেবা কলআউট নীতিতে একটি সম্পূর্ণ অনুরোধ বার্তা তৈরি করতে পারেন যা একটি পেলোড, এনকোডিং প্রকার যেমন অ্যাপ্লিকেশন/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 নামক ভেরিয়েবলে বরাদ্দ করা হয়, যেখানে এটি একটি এক্সট্রাক্ট ভেরিয়েবল নীতি বা জাভাস্ক্রিপ্ট বা জাভাতে লেখা কাস্টম কোড দ্বারা পার্স করার জন্য উপলব্ধ। নীতিটি সময় শেষ হওয়ার আগে Google জিওকোডিং API থেকে প্রতিক্রিয়ার জন্য 30 সেকেন্ড অপেক্ষা করে৷
একটি সম্পূর্ণ নমুনা 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 প্রক্সি কনফিগার করতে পারেন৷
একটি কলআউট সাধারণত দুটি অন্যান্য নীতির সাথে ব্যবহার করা হয়: বার্তা বরাদ্দ করুন এবং ভেরিয়েবল এক্সট্র্যাক্ট করুন।
- রিকোয়েস্ট : অ্যাসাইন মেসেজ রিমোট সার্ভিসে পাঠানো রিকোয়েস্ট মেসেজকে পপুলেট করে।
প্রতিক্রিয়া : এক্সট্র্যাক্ট ভেরিয়েবল প্রতিক্রিয়া বিশ্লেষণ করে এবং নির্দিষ্ট বিষয়বস্তু বের করে।
সাধারণ পরিষেবা কলআউট নীতির সংমিশ্রণে অন্তর্ভুক্ত রয়েছে:
- বার্তা নীতি বরাদ্দ করে : একটি অনুরোধ বার্তা তৈরি করে, HTTP শিরোনাম, ক্যোয়ারী প্যারামিটার, HTTP ক্রিয়া সেট করে ইত্যাদি।
- পরিষেবা কলআউট নীতি: বরাদ্দ বার্তা নীতির দ্বারা তৈরি একটি বার্তার উল্লেখ করে, বহিরাগত কলের জন্য একটি লক্ষ্য URL সংজ্ঞায়িত করে এবং লক্ষ্য পরিষেবাটি ফেরত দেওয়া প্রতিক্রিয়া বস্তুর জন্য একটি নাম সংজ্ঞায়িত করে৷
উন্নত কর্মক্ষমতার জন্য, আপনি পরিষেবা কলআউট প্রতিক্রিয়াগুলিও ক্যাশে করতে পারেন, যেমনটি এই Apigee কমিউনিটি থ্রেডে বর্ণিত হয়েছে: https://community.apigee.com/questions/34110/how-can-i-store-the-results-of-the- servicecallout.html । - এক্সট্র্যাক্ট ভেরিয়েবল নীতি : সাধারণত একটি 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 | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name
বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
---|---|
উপস্থিতি | ঐচ্ছিক |
টাইপ | স্ট্রিং |
<অনুরোধ> উপাদান
অনুরোধ বার্তা ধারণকারী ভেরিয়েবল নির্দিষ্ট করে যা 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 clearPayload="true" variable="servicecallout.request"/> চলুন এই ডিফল্ট মান মানে কি তাকান. প্রথমত, আপনি যদি ডেটা মাস্কিং ব্যবহার করেন তবে এই ডিফল্ট নামটি সম্পর্কে জানা গুরুত্বপূর্ণ -- যদি আপনি পরিবর্তনশীল নামটি বাদ দেন, তাহলে আপনাকে আপনার মাস্ক কনফিগারেশনে |
উপস্থিতি | ঐচ্ছিক। |
টাইপ | N/A |
গুণাবলী
বৈশিষ্ট্য | বর্ণনা | ডিফল্ট | উপস্থিতি |
---|---|---|---|
পরিবর্তনশীল | ভেরিয়েবলের নাম যেখানে অনুরোধ বার্তা থাকবে। | servicecallout.request | ঐচ্ছিক |
ক্লিয়ারপেলোড | যদি ক্লিয়ারপেলোড বিকল্পটিকে মিথ্যাতে সেট করুন শুধুমাত্র যদি পরিষেবা কলআউট কার্যকর হওয়ার পরে অনুরোধ বার্তাটি প্রয়োজন হয়। | সত্য | ঐচ্ছিক |
<অনুরোধ>/<Unresolved Variables> উপাদান
সত্যে সেট করা হলে, নীতি অনুরোধে কোনো অমীমাংসিত পরিবর্তনশীল ত্রুটি উপেক্ষা করে।
<Request clearPayload="true" variable="myRequest"> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </Request>
ডিফল্ট | মিথ্যা |
উপস্থিতি | ঐচ্ছিক |
টাইপ | বুলিয়ান |
<প্রতিক্রিয়া> উপাদান
যখন API প্রক্সি লজিকের জন্য আরও প্রক্রিয়াকরণের জন্য দূরবর্তী কল থেকে প্রতিক্রিয়ার প্রয়োজন হয় তখন এই উপাদানটি অন্তর্ভুক্ত করুন৷
যখন এই উপাদানটি উপস্থিত থাকে, তখন এটি ভেরিয়েবলের নাম নির্দিষ্ট করে যা বহিরাগত পরিষেবা থেকে প্রাপ্ত প্রতিক্রিয়া বার্তা ধারণ করবে। লক্ষ্য থেকে প্রতিক্রিয়া শুধুমাত্র পরিবর্তনশীলকে বরাদ্দ করা হয় যখন সম্পূর্ণ প্রতিক্রিয়া নীতি দ্বারা সফলভাবে পড়া হয়। দূরবর্তী কল কোনো কারণে ব্যর্থ হলে, নীতি একটি ত্রুটি ফেরত.
যদি এই উপাদানটি বাদ দেওয়া হয়, API প্রক্সি একটি প্রতিক্রিয়ার জন্য অপেক্ষা করে না; API প্রক্সি ফ্লো এক্সিকিউশন পরবর্তী যেকোন প্রবাহ পদক্ষেপের সাথে চলতে থাকে। এছাড়াও, কোনও Response
উপাদান ছাড়াই স্পষ্টভাবে বলার জন্য, লক্ষ্য থেকে প্রতিক্রিয়া পরবর্তী ধাপে প্রক্রিয়াকরণের জন্য উপলব্ধ নয়, এবং দূরবর্তী কলে ব্যর্থতা সনাক্ত করার জন্য প্রক্সি প্রবাহের কোনও উপায় নেই। ServiceCallout ব্যবহার করার সময় Response
উপাদান বাদ দেওয়ার জন্য একটি সাধারণ ব্যবহার: একটি বহিরাগত সিস্টেমে বার্তা লগ করতে।
<Response>calloutResponse</Response>
ডিফল্ট | এন.এ |
উপস্থিতি | ঐচ্ছিক |
টাইপ | স্ট্রিং |
<টাইমআউট> উপাদান
মিলিসেকেন্ডে সময় যে পরিষেবা কলআউট নীতি লক্ষ্য থেকে একটি প্রতিক্রিয়ার জন্য অপেক্ষা করবে৷ আপনি রানটাইমে গতিশীলভাবে এই মান সেট করতে পারবেন না। যদি পরিষেবা কলআউট একটি টাইমআউট হিট করে, একটি HTTP 500 ফেরত দেওয়া হয়, নীতি ব্যর্থ হয় এবং API প্রক্সি একটি ত্রুটির অবস্থায় চলে যায়, যেমন হ্যান্ডলিং ফল্টস -এ বর্ণনা করা হয়েছে।
<Timeout>30000</Timeout>
ডিফল্ট | 55000 মিলিসেকেন্ড (55 সেকেন্ড), Apigee Edge এর জন্য ডিফল্ট HTTP টাইমআউট সেটিং |
উপস্থিতি | ঐচ্ছিক |
টাইপ | পূর্ণসংখ্যা |
<HTTPTtargetConnection> উপাদান
URL, TLS/SSL, এবং HTTP বৈশিষ্ট্যের মতো পরিবহনের বিবরণ প্রদান করে। <TargetEndpoint>
কনফিগারেশন রেফারেন্স দেখুন।
<HTTPTargetConnection> <URL>http://example.com</URL> <LoadBalancer/> <SSLInfo/> <Properties/> </HTTPTargetConnection>
ডিফল্ট | N/A |
উপস্থিতি | প্রয়োজন |
টাইপ | N/A |
<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>
ডিফল্ট | N/A |
উপস্থিতি | প্রয়োজন |
টাইপ | স্ট্রিং |
<HTTPTargetConnection>/<SSLIinfo> উপাদান
ব্যাকএন্ড পরিষেবাতে TLS/SSL কনফিগারেশন। TLS/SSL কনফিগারেশনে সহায়তার জন্য, এজ থেকে ব্যাকএন্ডে TLS কনফিগার করা (ক্লাউড এবং প্রাইভেট ক্লাউড) এবং API প্রক্সি কনফিগারেশন রেফারেন্সে "TLS/SSL টার্গেটএন্ডপয়েন্ট কনফিগারেশন" দেখুন।