আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
এই বিষয়ে, আপনি নীতি কম্পোজিশন ব্যবহার করে কীভাবে একটি মিক্স-আপ তৈরি করতে হয় তা জানবেন। নীতি কম্পোজিশন হল একটি Apigee প্রক্সি প্যাটার্ন যা আপনাকে নীতি ব্যবহার করে একাধিক ব্যাকএন্ড টার্গেট থেকে পাওয়া ফলাফলকে একটি একক উত্তরে একত্রিত করতে দেয়।
নীতি কম্পোজিশনের সাধারণ ওভারভিউ পেতে, API Proxy Cookbook প্যাটার্নে "নীতি কম্পোজিশন প্যাটার্ন" দেখুন।
স্যাম্পেল কোড ডাউনলোড করে ব্যবহার করে দেখুন
এই কুকবুক উদাহরণ সম্পর্কে
এই কুকবুক উদাহরণটি নীতি কম্পোজিশন নামক API প্রক্সি প্যাটার্নকে ব্যাখ্যা করে। এই প্যাটার্ন একাধিক ব্যাকএন্ড সোর্স থেকে ডেটা একত্রিত করার একটি উপায় (অন্যান্য উপায়ও আছে) প্রদান করে। আরও সাধারণভাবে, এই বিষয় থেকে বোঝা যায় যে কীভাবে নীতিগুলিকে একত্রিত ও চেইন করা যায় যাতে কাঙ্ক্ষিত ফলাফল পাওয়া যায়। এই প্যাটার্ন ও অন্যান্য সম্পর্কিত প্যাটার্নের সাধারণ ওভারভিউ পেতে, API প্রক্সি কুকবুক প্যাটার্ন দেখুন।
এখানে যে উদাহরণ নিয়ে আলোচনা করা হয়েছে, তাতে এই দুটি আলাদা পাবলিক API থেকে ডেটা একত্রিত করতে নীতি কম্পোজিশন ব্যবহার করা হয়েছে:
- Google জিওকোডিং API: এই API ঠিকানা (যেমন, "1600 Amphitheatre Parkway, Mountain View, CA") থেকে ভৌগোলিক কোঅর্ডিনেটে (যেমন, অক্ষাংশ 37.423021 এবং দ্রাঘিমাংশ -122.083739) পরিবর্তন করে।
- Google Elevation API এই API, উচ্চতা ডেটার জন্য পৃথিবীর লোকেশন কোয়েরি করার একটি সহজ ইন্টারফেস প্রদান করে। এই উদাহরণে, Geocoding API থেকে পাওয়া কোঅর্ডিনেট এই API-তে ইনপুট হিসেবে ব্যবহার করা হবে।

অ্যাপ ডেভেলপাররা দুটি কোয়েরি প্যারামিটার, একটি পিন কোড এবং একটি দেশ আইডি সহ এই API প্রক্সি কল করবে:
$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"
উত্তরটি হল একটি JSON অবজেক্ট যাতে জিওকোড করা লোকেশন (অক্ষাংশ/দ্রাঘিমাংশ) থাকে। এটি প্রদান করা পোস্টাল কোড এলাকার কেন্দ্র এবং সেই জিওকোড করা লোকেশন সম্পর্কিত উচ্চতা।
{
"ElevationResponse":{
"status":"OK",
"result":{
"location":{
"lat":"39.7500713",
"lng":"-74.1357407"
},
"elevation":"0.5045232",
"resolution":"76.3516159"
}
}
}শুরু করার আগে
নীতি কম্পোজিশন প্যাটার্নের সংক্ষিপ্ত ওভারভিউ পড়তে চাইলে, API Proxy Cookbook প্যাটার্নে"নীতি কম্পোজিশন প্যাটার্ন" দেখুন।
এই কুকবুক উদাহরণ এক্সপ্লোর করার আগে, আপনাকে এইসব মৌলিক ধারণা সম্পর্কেও পরিচিত হতে হবে:
- নীতি কী এবং কীভাবে প্রক্সির সাথে তা অ্যাটাচ করতে হয়। নীতি সম্পর্কে ভালভাবে জানতে, নীতি কী? লিঙ্কে যান।
- ফ্লো কনফিগার করা নিবন্ধে API প্রক্সি ফ্লোয়ের গঠন সম্পর্কে ব্যাখ্যা করা হয়েছে। ফ্লো আপনাকে API প্রক্সি দ্বারা নীতি প্রয়োগ করার ক্রম নির্দিষ্ট করতে দেয়। এই উদাহরণে, একাধিক নীতি তৈরি করা হয়েছে এবং API প্রক্সি ফ্লোতে যোগ করা হয়েছে।
- আপনার ফাইল সিস্টেমে কীভাবে API প্রক্সি প্রোজেক্ট সাজানো হয়, তা API প্রক্সি কনফিগারেশন রেফারেন্সে ব্যাখ্যা করা হয়েছে। এই কুকবুক টপিক, ক্লাউড-ভিত্তিক ডেভেলপমেন্টের বিপরীতে লোকাল ডেভেলপমেন্ট (ফাইল সিস্টেম-ভিত্তিক) দেখায়, যেখানে আপনি API প্রক্সি ডেভেলপ করার জন্য ম্যানেজমেন্ট UI ব্যবহার করতে পারেন।
- API key যাচাইকরণ ব্যবহার করা। এটি হল অ্যাপ-ভিত্তিক নিরাপত্তার সবচেয়ে সহজ ফর্ম যা আপনি কোনও API-এর জন্য কনফিগার করতে পারবেন। আরও তথ্যের জন্য API কী দেখুন। এছাড়াও, আপনি API কী-এর মাধ্যমে API সুরক্ষিত করুন টিউটোরিয়ালটি দেখতে পারেন।
- XML সম্পর্কে কার্যকরী জ্ঞান। এই উদাহরণে, আমরা API প্রক্সি ও এর নীতিগুলি XML ফাইলের মাধ্যমে তৈরি করি, যা ফাইল সিস্টেমে থাকে।
আপনি স্যাম্পেল কোড ডাউনলোড করে থাকলে, এই বিষয়ে আলোচনা করা সব ফাইল mashup-policy-cookbook স্যাম্পেল ফোল্ডারে খুঁজে পাবেন। নিচের বিভাগে স্যাম্পেল কোড সম্পর্কে বিস্তারিত আলোচনা করা হয়েছে।
পরিস্থিতি অনুযায়ী পরিবর্তনশীল
নীতিতে যাওয়ার আগে, আমাদের উদাহরণ API প্রক্সির মূল ফ্লো দেখে নেওয়া যাক। নিচে দেখানো ফ্লো XML থেকে এই প্রক্সি, এর ব্যবহার করা নীতি এবং সেইসব নীতি কোথায় কল করা হয়, সেইসব সম্পর্কে আমরা অনেক কিছু জানতে পারি।
স্যাম্পেল ডাউনলোডে, আপনি এই XML ফাইল
doc-samples/policy-mashup-cookbook/apiproxy/proxies/default.xml-এ দেখতে পাবেন।
<ProxyEndpoint name="default"> <Flows> <Flow name="default"> <Request> <!-- Generate request message for the Google Geocoding API --> <Step><Name>GenerateGeocodingRequest</Name></Step> <!-- Call the Google Geocoding API --> <Step><Name>ExecuteGeocodingRequest</Name></Step> <!-- Parse the response and set variables --> <Step><Name>ParseGeocodingResponse</Name></Step> <!-- Generate request message for the Google Elevation API --> <Step><Name>AssignElevationParameters</Name></Step> </Request> <Response> <!-- Parse the response message from the Elevation API --> <Step><Name>ParseElevationResponse</Name></Step> <!-- Generate the final JSON-formatted response with JavaScript --> <Step><Name>GenerateResponse</Name></Step> </Response> </Flow> </Flows> <HTTPProxyConnection> <!-- Add a base path to the ProxyEndpoint for URI pattern matching--> <BasePath>/policy-mashup-cookbook</BasePath> <!-- Listen on both HTTP and HTTPS endpoints --> <VirtualHost>default</VirtualHost> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection> <RouteRule name="default"> <!-- Connect ProxyEndpoint to named TargetEndpoint under /targets --> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
ফ্লোয়ের এলিমেন্টগুলির সারসংক্ষেপ এখানে দেওয়া হল।
- <Request> - <Request> এলিমেন্টে একাধিক <Step> এলিমেন্ট থাকে। প্রতিটি ধাপে, এই বিষয়ের বাকি অংশে আমরা যে নীতি তৈরি করব তার মধ্যে একটি নীতিকে কল করা হয়। এইসব নীতি অনুরোধ মেসেজ তৈরি করা, সেটি পাঠানো এবং উত্তর পার্স করা সংক্রান্ত। এই বিষয়টির শেষে, আপনি এইসব নীতির ভূমিকা বুঝতে পারবেন।
- <Response> - <Response> এলিমেন্টে আরও আছে <Steps>। এইসব ধাপ এমন নীতিও কল করে যেগুলি টার্গেট এন্ডপয়েন্ট (Google Elevation API) থেকে পাওয়া ফাইনাল উত্তর প্রসেস করার জন্য দায়ী।
- <HttpProxyConnection> - এই এলিমেন্টটি অ্যাপ কীভাবে এই API প্রক্সির সাথে কানেক্ট করবে সেই সম্পর্কে বিবরণ নির্দিষ্ট করে, এর মধ্যে <BasePath> অন্তর্ভুক্ত, যা নির্দিষ্ট করে যে কীভাবে এই API কল করা হবে।
- <RouteRule> - ইনবাউন্ড অনুরোধ মেসেজ প্রসেস করার সাথে সাথেই কী হবে তা এই এলিমেন্ট নির্দিষ্ট করে। এই ক্ষেত্রে, TargetEndpoint কল করা হয়। এই গুরুত্বপূর্ণ ধাপ সম্পর্কে আমরা এই বিষয়ের মধ্যে আরও আলোচনা করব।
নীতি তৈরি করা
নিম্নলিখিত বিভাগে এই নীতিগত কম্পোজিশনের উদাহরণ তৈরি করা প্রতিটি নীতি নিয়ে আলোচনা করা হয়েছে।
প্রথম AssignMessage নীতি তৈরি করুন
নিচে তালিকাভুক্ত প্রথম AssignMessage নীতি, Google Geocoding পরিষেবায় পাঠানো হবে এমন একটি অনুরোধ মেসেজ তৈরি করে।

প্রথমে নীতি কোড দিয়ে শুরু করা যাক, তারপর আমরা এর এলিমেন্টগুলি আরও বিস্তারিতভাবে ব্যাখ্যা করব। স্যাম্পেল ডাউনলোডে
আপনি এই XML ফাইলটি
doc-samples/policy-mashup-cookbook/apiproxy/policies/GenerateGeocodingRequest.xml-এ দেখতে পাবেন।
<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.postalcode}</QueryParam> <QueryParam name="region">{request.queryparam.country}</QueryParam> <QueryParam name="sensor">false</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <!-- Set variables for use in the final response --> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
এই নীতির এলিমেন্টগুলির সংক্ষিপ্ত বিবরণ এখানে দেওয়া হল। আপনি এই নীতি সম্পর্কে আরও জানতে অ্যাসাইন মেসেজ নীতি পড়ুন।
- <AssignMessage name> - এই নীতিকে একটি নাম দেয়। ফ্লোতে নীতি উল্লেখ করা হলে এই নাম ব্যবহার করা হয়।
- <AssignTo> - GeocodingRequest নামের একটি ভেরিয়েবল তৈরি করে। এই ভেরিয়েবলটি অনুরোধ অবজেক্টকে এনক্যাপসুলেট করে যা ServiceCallout নীতি দ্বারা ব্যাকএন্ডে পাঠানো হবে।
- <QueryParams> - ব্যাকএন্ড API কলের জন্য প্রয়োজনীয় কোয়েরি প্যারামিটার সেট করে।
এই ক্ষেত্রে, জিওকোডিং API-কে লোকেশন জানতে হবে, যা
পোস্টাল কোড ও কান্ট্রি আইডির মাধ্যমে প্রকাশ করা হয়। অ্যাপ ব্যবহারকারী এই তথ্য প্রদান করেন এবং
আমরা এখান থেকে তা এক্সট্র্যাক্ট করি। API-এর জন্য
sensorparam প্রয়োজন এবং এটি true বা false হতে পারে এবং আমরা এখানে এটিকে false হিসেবে হার্ডকোড করেছি। - <Verb> - এই ক্ষেত্রে, আমরা API-তে একটি সাধারণ GET অনুরোধ করছি।
- <AssignVariable> - এইসব ভেরিয়েবল, API-তে পাস করা ভ্যালু সেভ করে। এই উদাহরণে, ক্লায়েন্টকে ফেরত দেওয়া উত্তরে ভেরিয়েবল পরে অ্যাক্সেস করা হবে।
ServiceCallout সহ অনুরোধ পাঠান
নীতি কম্পোজিশন সিকোয়েন্সের পরবর্তী ধাপ হল ServiceCallout নীতি তৈরি করা। নিচে তালিকাভুক্ত ServiceCallout নীতি, Google Geocoding পরিষেবায় আগের AssignMessage নীতিতে তৈরি করা অনুরোধ অবজেক্ট পাঠায় এবং GeocodingResponse নামের ভেরিয়েবলে ফলাফল সেভ করে।

আগের মতো, প্রথমে কোডটি দেখে নেওয়া যাক। এরপরে বিস্তারিত ব্যাখ্যা দেওয়া হল। আপনি পরিষেবা কলআউট
নীতি থেকে এই নীতি সম্পর্কে আরও
জানতে পারবেন। স্যাম্পেল ডাউনলোডে, আপনি এই XML ফাইল
doc-samples/policy-mashup-cookbook/apiproxy/policies/ExecuteGeocodingRequest.xml-এ দেখতে পাবেন।
<ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
এই নীতির এলিমেন্টগুলির সংক্ষিপ্ত বিবরণ এখানে দেওয়া হল।
- <ServiceCallout> - আগের নীতির মতো, এটিরও একটি নাম আছে।
- <Request variable> - This is the variable that was created in the AssignMessage policy. এটি ব্যাকএন্ড API-তে যাওয়া অনুরোধকে এনক্যাপসুলেট করে।
- <Response> - এই এলিমেন্টটি এমন একটি ভেরিয়েবলের নাম দেয় যেখানে উত্তরটি স্টোর করা হয়। আপনি দেখতে পাবেন যে ExtractVariables নীতি পরে এই ভেরিয়েবল অ্যাক্সেস করবে।
- <HTTPTargetConnection> - Specifies the target URL of the backend API. এই ক্ষেত্রে, আমরা নির্দিষ্ট করি যে API একটি JSON উত্তর রিটার্ন করবে।
এখন আমাদের দুটি নীতি আছে, একটিতে ব্যাকএন্ড API (Google-এর জিওকোডিং API) ব্যবহার করার জন্য প্রয়োজনীয় অনুরোধ সংক্রান্ত তথ্য নির্দিষ্ট করা আছে এবং দ্বিতীয়টিতে ব্যাকএন্ড API-তে অনুরোধ পাঠানো হয়। এরপরে, আমরা উত্তর ম্যানেজ করব।
ExtractVariables-এর মাধ্যমে উত্তর পার্স করা
ExtractVariables নীতি, ServiceCallout নীতির মাধ্যমে পাওয়া রেসপন্স মেসেজ থেকে কন্টেন্ট পার্স করার জন্য একটি সহজ মেকানিজম প্রদান করে। JSON বা XML পার্স করার জন্য ExtractVariables ব্যবহার করা যেতে পারে অথবা URI পাথ, HTTP হেডার, কোয়েরি প্যারামিটার ও ফর্ম প্যারামিটার থেকে কন্টেন্ট এক্সট্র্যাক্ট করার জন্য এটি ব্যবহার করা যেতে পারে।

ExtractVariables নীতির তালিকা এখানে দেওয়া হল। আপনি
Extract Variables
নীতি থেকে এই নীতি সম্পর্কে আরও জানতে পারবেন। স্যাম্পেল ডাউনলোডে, আপনি এই XML ফাইল
doc-samples/policy-mashup-cookbook/apiproxy/policies/ParseGeocodingResponse.xml-এ দেখতে পাবেন।
<ExtractVariables name="ParseGeocodingResponse"> <Source>GeocodingResponse</Source> <VariablePrefix>geocoderesponse</VariablePrefix> <JSONPayload> <Variable name="latitude"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
ExtractVariable নীতির মূল উপাদানগুলি হল:
- <ExtractVariables name> - আবার, কোনও ফ্লোতে ব্যবহার করা হলে, নীতিটি উল্লেখ করার জন্য নীতির নাম ব্যবহার করা হয়।
- <Source> - ServiceCallout নীতিতে আমরা যে রেসপন্স ভেরিয়েবল তৈরি করেছি সেটি নির্দিষ্ট করে । এই ভেরিয়েবল থেকে এই নীতি ডেটা এক্সট্র্যাক্ট করে।
- <VariablePrefix> - ভেরিয়েবল প্রিফিক্স এই নীতিতে তৈরি করা অন্যান্য ভেরিয়েবলের জন্য নেমস্পেস নির্দিষ্ট করে। প্রিফিক্স যেকোনও নাম হতে পারে, তবে Edge-এর আগে থেকে সংজ্ঞায়িত ভেরিয়েবল দ্বারা সংজ্ঞায়িত রিজার্ভ করা নামগুলি ব্যবহার করা যাবে না।
- <JSONPayload> - এই এলিমেন্টটি আমাদের আগ্রহের রেসপন্স ডেটা পুনরুদ্ধার করে এবং এটিকে নামযুক্ত ভেরিয়েবলে রাখে। আসলে, Geocoding API, অক্ষাংশ ও দ্রাঘিমাংশের থেকে অনেক বেশি তথ্য প্রদান করে। তবে, এই স্যাম্পেলের জন্য আমাদের শুধু এই মানগুলিই প্রয়োজন। আপনি API-এর ডকুমেন্টেশনে Geocoding API-এর মাধ্যমে রিটার্ন করা JSON-এর সম্পূর্ণ রেন্ডারিং দেখতে পাবেন। geometry.location.lat এবং geometry.location.lng-এর ভ্যালু হল ফেরানো JSON অবজেক্টের অনেক ফিল্ডের মধ্যে দুটি।
এটি হয়ত স্পষ্ট নয়, কিন্তু এটি দেখা গুরুত্বপূর্ণ যে ExtractVariables দুটি ভেরিয়েবল তৈরি করে, যার নামে ভেরিয়েবল প্রিফিক্স (geocoderesponse) এবং প্রকৃত ভেরিয়েবলের নাম থাকে যা নীতিতে উল্লেখ করা হয়েছে। এইসব ভেরিয়েবল API প্রক্সিতে স্টোর করা হয় এবং প্রক্সি ফ্লোয়ের মধ্যে অন্যান্য নীতির জন্য উপলভ্য থাকে, যেমন আপনি দেখতে পাবেন। ভেরিয়েবলগুলি হল:
- geocoderesponse.latitude
- geocoderesponse.longitude
বেশিরভাগ কাজ এখন হয়ে গেছে। আমরা তিনটি নীতির একটি কম্পোজিট তৈরি করেছি যা একটি অনুরোধ তৈরি করে, একটি ব্যাকএন্ড API কল করে এবং ফিরে আসা JSON ডেটা পার্স করে। শেষ ধাপে, আমরা ফ্লোয়ের এই অংশ থেকে পাওয়া ডেটা অন্য একটি AssignMessage নীতিতে ফিড করব, দ্বিতীয় ব্যাকএন্ড API (Google Elevation API) কল করব এবং অ্যাপ ডেভেলপারকে আমাদের ম্যাস-আপ করা ডেটা ফেরত দেব।
AssignMessage ব্যবহার করে দ্বিতীয় অনুরোধ তৈরি করা
নিম্নলিখিত AssignMessage নীতিতে প্রথম ব্যাকএন্ড (Google জিওকোডিং) থেকে পাওয়া ভেরিয়েবল ব্যবহার করা হয়েছে যা আমরা সেভ করে রেখেছি এবং সেগুলি দ্বিতীয় API (Google Elevation)-এর জন্য তৈরি করা অনুরোধে প্লাগ করা হয়েছে। আগে উল্লেখ করা হয়েছে, এই ভেরিয়েবলগুলি হল geocoderesponse.latitude এবং geocoderesponse.longitude.
স্যাম্পেল ডাউনলোডে, আপনি এই XML ফাইল
doc-samples/policy-mashup-cookbook/apiproxy/policies/AssignElevationParameters.xml-এ দেখতে পাবেন।
<AssignMessage name="AssignElevationParameters">
<Remove>
<QueryParams>
<QueryParam name="country"/>
<QueryParam name="postalcode"/>
</QueryParams>
</Remove>
<Set>
<QueryParams>
<QueryParam name="locations">{geocoderesponse.latitude},{geocoderesponse.longitude}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
</Set>
</AssignMessage>আপনি Google Elevation API পরীক্ষা করে দেখলে, দেখতে পাবেন যে এটি দুটি কোয়েরি প্যারামিটার নেয়।
প্রথমটি হল locations এবং এর মান হল অক্ষাংশ ও দ্রাঘিমাংশ
(কমা দিয়ে আলাদা করা মান)। অন্য প্যারামিটারটি হল sensor, যেটি প্রয়োজন এবং অবশ্যই
true বা false হতে হবে। এই পর্যায়ে সবচেয়ে গুরুত্বপূর্ণ বিষয় হল, আমরা এখানে যে অনুরোধ
মেসেজ তৈরি করি তার জন্য ServiceCallout-এর প্রয়োজন হয় না। এই মুহূর্তে ServiceCallout থেকে দ্বিতীয়
API কল করার প্রয়োজন নেই কারণ আমরা প্রক্সির
TargetEndpoint থেকে ব্যাকএন্ড API কল করতে পারি। আপনি যদি এটি সম্পর্কে চিন্তা করেন, তাহলে Google Elevations
API কল করার জন্য আমাদের কাছে প্রয়োজনীয় সমস্ত ডেটা আছে। এই ধাপে তৈরি হওয়া অনুরোধ মেসেজে ServiceCallout-এর প্রয়োজন নেই, কারণ
মূল অনুরোধ পাইপলাইনের জন্য অনুরোধ তৈরি করা হয়েছে এবং তাই এই API প্রক্সির জন্য কনফিগার করা RouteRule অনুসরণ করে
ProxyEndpoint থেকে TargetEndpoint-এ ফরোয়ার্ড করা হবে।
TargetEndpoint রিমোট API-এর সাথে কানেকশন ম্যানেজ করে। (মনে রাখবেন যে
TargetEndpoint-এর জন্য HTTPConnection-এ এলিভেশন API-এর URL সংজ্ঞায়িত করা হয়েছে। আপনি আরও জানতে চাইলে Elevation API
ডকুমেন্টেশন দেখুন। আগে সেভ করা QueryParams,
country এবং postalcode-এর আর প্রয়োজন নেই, তাই আমরা সেগুলি এখান থেকে
সরিয়ে দিচ্ছি।
সংক্ষিপ্ত বিরতি: ফ্লোতে ফিরে যাওয়া
এই পর্যায়ে, আপনি ভাবতে পারেন যে আমরা কেন আরেকটি ServiceCallout নীতি তৈরি করছি না। সব মিলিয়ে
আমরা আরেকটি মেসেজ তৈরি করেছি। সেই মেসেজটি কীভাবে টার্গেট, Google
Elevation API-তে পাঠানো হয়? ফ্লোয়ের <RouteRule> এলিমেন্টে উত্তরটি রয়েছে। <RouteRule>
ফ্লোয়ের <Request> অংশটি এক্সিকিউট করার পরে
বাকি থাকা অনুরোধ মেসেজ নিয়ে কী করতে হবে তা নির্দিষ্ট করে। এই <RouteRule>-এর মাধ্যমে নির্দিষ্ট করা TargetEndpoint,
API প্রক্সিটিকে মেসেজটি
http://maps.googleapis.com/maps/api/elevation/xml-এ ডেলিভার করার কথা বলে।
আপনি যদি স্যাম্পেল API প্রক্সি ডাউনলোড করে থাকেন, তাহলে আপনি ফাইল
doc-samples/policy-mashup-cookbook/apiproxy/targets/default.xml-এ TargetProxy XML খুঁজে পাবেন।
<TargetEndpoint name="default"> <HTTPTargetConnection> <!-- This is where we define the target. For this sample we just use a simple URL. --> <URL>http://maps.googleapis.com/maps/api/elevation/xml</URL> </HTTPTargetConnection> </TargetEndpoint>
এখন, আমাদের শুধু Google Elevation API থেকে পাওয়া উত্তর প্রসেস করতে হবে এবং আমাদের কাজ শেষ।
XML থেকে JSON-এ রেসপন্স কনভার্ট করুন
এই উদাহরণে, Google Elevation API থেকে পাওয়া উত্তর XML হিসেবে রিটার্ন করা হয়েছে। "অতিরিক্ত ক্রেডিট"-এর জন্য, XML থেকে JSON-এ রেসপন্স ট্রান্সফর্ম করতে, আমাদের কম্পোজিটে আরও একটি নীতি যোগ করা যাক।
এই উদাহরণে, কনভার্সন পারফর্ম করার জন্য, JavaScript কোড থাকা রিসোর্স ফাইল সহ, GenerateResponse নামের JavaScript নীতি ব্যবহার করা হয়েছে। নিচে GenerateResponse নীতি সংক্রান্ত সংজ্ঞা দেখানো হল:
<Javascript name="GenerateResponse" timeout="10000"> <ResourceURL>jsc://GenerateResponse.js</ResourceURL> </Javascript>
GenerateResponse.js রিসোর্স ফাইলে কনভার্সন পারফর্ম করার জন্য ব্যবহৃত জাভাস্ক্রিপ্ট
অন্তর্ভুক্ত থাকে। আপনি সেই কোডটি
ফাইল doc-samples/policy-mashup-cookbook/apiproxy/resources/JSC/GenerateResponse.js-এ দেখতে পাবেন।
এছাড়াও, XML থেকে JSON-এ কনভার্ট করার জন্য Apigee একটি আউট-অফ-দ্য-বক্স নীতি, XMLToJSON প্রদান করে। আপনি
নিচে দেখানো xmltojson নীতির পরিবর্তে ব্যবহার করার জন্য ProxyEndpoint এডিট করতে
পারেন।
<XMLToJSON name="xmltojson"> <Options> </Options> <OutputVariable>response</OutputVariable> <Source>response</Source> </XMLToJSON>
উদাহরণ পরীক্ষা করা
আপনি যদি আগে এটি না করে থাকেন, তাহলে policy-mashup-cookbook নমুনা ডাউনলোড, ডেপ্লয় ও রান করার চেষ্টা করুন, যা আপনি Apigee Edge নমুনা রিপোজিটরি GitHub-এ doc-samples ফোল্ডারে পাবেন। শুধু policy-mashup-cookbook ফোল্ডারে থাকা README ফাইলে দেওয়া নির্দেশাবলী অনুসরণ করুন। অথবা, এখানে দেওয়া সংক্ষিপ্ত নির্দেশাবলী অনুসরণ করুন: স্যাম্পেল API প্রক্সি ব্যবহার করা।
সংক্ষেপে, আপনি কম্পোজিট API-কে নিম্নলিখিতভাবে কল করতে পারবেন। আপনার সংস্থার নামের সাথে {myorg} পরিবর্তন করুন:
$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"
উত্তরে অ্যাপের শেষ ব্যবহারকারীর দেওয়া পোস্টাল কোডের কেন্দ্রস্থলের জিওকোড করা লোকেশন এবং সেই জিওকোড করা লোকেশনের উচ্চতা অন্তর্ভুক্ত থাকে। ডেটা দুটি ব্যাকএন্ড API থেকে নেওয়া হয়েছে, API প্রক্সির সাথে অ্যাটাচ করা নীতি অনুযায়ী তা মিক্স করা হয়েছে এবং একটি রেসপন্সের মাধ্যমে ক্লায়েন্টকে ফেরত দেওয়া হয়েছে।
{ "country":"us", "postalcode":"08008", "elevation":{ "meters":0.5045232, "feet":1.6552599030345978 }, "location":{ "latitude":39.75007129999999, "longitude":-74.1357407 } }
সারাংশ
এই কুকবুক টপিকে একাধিক ব্যাকএন্ড সোর্স থেকে পাওয়া ডেটা ম্যাশ-আপ করতে নীতি কম্পোজিশন প্যাটার্ন কীভাবে ব্যবহার করতে হয় তা ব্যাখ্যা করা হয়েছে। আপনার API-তে ক্রিয়েটিভ ফাংশনালিটি যোগ করার জন্য API প্রক্সি ডেভেলপমেন্টে নীতি কম্পোজিশন একটি সাধারণ প্যাটার্ন হিসেবে ব্যবহার করা হয়।