নীতি রচনা ব্যবহার করে

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

এই টপিকে, আপনি পলিসি কম্পোজিশন ব্যবহার করে কীভাবে একটি ম্যাশআপ তৈরি করতে হয় তা শিখবেন। পলিসি কম্পোজিশন হলো একটি Apigee প্রক্সি প্যাটার্ন যা আপনাকে পলিসি ব্যবহার করে একাধিক ব্যাকএন্ড টার্গেটের ফলাফলকে একটি একক রেসপন্সে একত্রিত করতে দেয়।

পলিসি কম্পোজিশন সম্পর্কে একটি সাধারণ ধারণা পেতে, API Proxy Cookbook patterns- এর "The policy composition pattern" অংশটি দেখুন।

নমুনা কোডটি ডাউনলোড করে চেষ্টা করে দেখুন।

এই রান্নার বইয়ের উদাহরণ সম্পর্কে

এই কুকবুক উদাহরণটি পলিসি কম্পোজিশন নামক একটি এপিআই প্রক্সি প্যাটার্ন ব্যাখ্যা করে। এই প্যাটার্নটি একাধিক ব্যাকএন্ড উৎস থেকে ডেটা একত্রিত করার একটি উপায় প্রদান করে (অন্যান্য উপায়ও রয়েছে)। আরও সাধারণভাবে, এই বিষয়টি দেখায় কিভাবে একটি কাঙ্ক্ষিত ফলাফল তৈরি করার জন্য পলিসিগুলোকে একত্রিত ও শৃঙ্খলিত করা যায়। এই প্যাটার্ন এবং এর সাথে সম্পর্কিত অন্যান্য প্যাটার্ন সম্পর্কে একটি সাধারণ ধারণা পেতে, এপিআই প্রক্সি কুকবুক প্যাটার্নস দেখুন।

এখানে আলোচিত উদাহরণটি এই দুটি পৃথক পাবলিক এপিআই থেকে ডেটা একত্রিত করতে পলিসি কম্পোজিশন ব্যবহার করে:

  • গুগল জিওকোডিং এপিআই : এই এপিআই ঠিকানা (যেমন "1600 Amphitheatre Parkway, Mountain View, CA") কে ভৌগোলিক স্থানাঙ্কে (যেমন অক্ষাংশ ৩৭.৪২৩০২১ এবং দ্রাঘিমাংশ -১২২.০৮৩৭৩৯) রূপান্তর করে।
  • গুগল এলিভেশন এপিআই (Google Elevation API) পৃথিবীর বিভিন্ন স্থানের উচ্চতার ডেটা কোয়েরি করার জন্য একটি সহজ ইন্টারফেস প্রদান করে। এই উদাহরণে, জিওকোডিং এপিআই (Geocoding 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"
      }
   }
}

শুরু করার আগে

আপনি যদি পলিসি কম্পোজিশন প্যাটার্ন সম্পর্কে একটি সংক্ষিপ্ত বিবরণ পড়তে চান, তাহলে এপিআই প্রক্সি কুকবুক প্যাটার্নস- এর "দ্য পলিসি কম্পোজিশন প্যাটার্ন" অংশটি দেখুন।

এই রান্নার বইয়ের উদাহরণটি খতিয়ে দেখার আগে, আপনার এই মৌলিক ধারণাগুলো সম্পর্কেও পরিচিত থাকা উচিত:

  • পলিসি কী এবং কীভাবে সেগুলোকে প্রক্সির সাথে সংযুক্ত করতে হয়। পলিসি সম্পর্কে একটি ভালো পরিচিতির জন্য, “পলিসি কী?” দেখুন।
  • একটি এপিআই প্রক্সি ফ্লো-এর গঠন, যেমনটি 'ফ্লো কনফিগার করা' অংশে ব্যাখ্যা করা হয়েছে। ফ্লো আপনাকে এপিআই প্রক্সি দ্বারা পলিসিগুলো কোন ক্রমে কার্যকর হবে তা নির্দিষ্ট করতে দেয়। এই উদাহরণে, বেশ কয়েকটি পলিসি তৈরি করে এপিআই প্রক্সির ফ্লো-তে যোগ করা হয়েছে।
  • এপিআই প্রক্সি কনফিগারেশন রেফারেন্সে যেমন ব্যাখ্যা করা হয়েছে, আপনার ফাইলসিস্টেমে একটি এপিআই প্রক্সি প্রজেক্ট কীভাবে সাজানো হয়। এই কুকবুক টপিকটি লোকাল ডেভেলপমেন্ট (ফাইল সিস্টেম-ভিত্তিক) প্রদর্শন করে, যা ক্লাউড-ভিত্তিক ডেভেলপমেন্টের বিপরীত, যেখানে আপনি এপিআই প্রক্সি ডেভেলপ করার জন্য ম্যানেজমেন্ট UI ব্যবহার করতে পারেন।
  • এপিআই কী ভ্যালিডেশনের ব্যবহার। এটি অ্যাপ-ভিত্তিক নিরাপত্তার সবচেয়ে সহজ রূপ যা আপনি একটি এপিআই-এর জন্য কনফিগার করতে পারেন। আরও তথ্যের জন্য এপিআই কী দেখুন। এছাড়াও আপনি এপিআই কী আবশ্যক করে একটি এপিআই সুরক্ষিত করার টিউটোরিয়ালটি দেখতে পারেন।
  • XML সম্পর্কে কার্যকরী জ্ঞান। এই উদাহরণে, আমরা ফাইলসিস্টেমে থাকা XML ফাইল ব্যবহার করে API প্রক্সি এবং এর পলিসিগুলো তৈরি করব।

আপনি যদি নমুনা কোডটি ডাউনলোড করে থাকেন, তাহলে এই বিষয়ে আলোচিত সমস্ত ফাইল mashup-policy-cookbook নমুনা ফোল্ডারে খুঁজে পাবেন। নিম্নলিখিত বিভাগগুলিতে নমুনা কোডটি বিস্তারিতভাবে আলোচনা করা হয়েছে।

স্রোতের সাথে গা ভাসানো

পলিসিগুলোতে যাওয়ার আগে, চলুন আমাদের উদাহরণ এপিআই প্রক্সির মূল কার্যপ্রবাহটি দেখে নেওয়া যাক। নিচে দেখানো ফ্লো এক্সএমএল (flow 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> - এই এলিমেন্টটি নির্দিষ্ট করে যে অ্যাপগুলি কীভাবে এই এপিআই প্রক্সির সাথে সংযোগ স্থাপন করবে, যার মধ্যে <BasePath> অন্তর্ভুক্ত থাকে, যা নির্দিষ্ট করে যে এই এপিআইটি কীভাবে কল করা হবে।
  • <RouteRule> - এই এলিমেন্টটি নির্দিষ্ট করে যে ইনবাউন্ড রিকোয়েস্ট মেসেজগুলো প্রসেস হওয়ার ঠিক পরে কী ঘটবে। এক্ষেত্রে, TargetEndpoint-কে কল করা হয়। এই টপিকের পরবর্তী অংশে আমরা এই গুরুত্বপূর্ণ ধাপটি নিয়ে আরও আলোচনা করব।

নীতিমালা তৈরি করা

নিম্নলিখিত বিভাগগুলিতে এই নীতি গঠনের উদাহরণটি তৈরি করা প্রতিটি নীতি নিয়ে আলোচনা করা হয়েছে।

প্রথম AssignMessage পলিসি তৈরি করুন

নীচে তালিকাভুক্ত প্রথম AssignMessage পলিসিটি একটি অনুরোধ বার্তা তৈরি করে, যা গুগল জিওকোডিং পরিষেবাতে পাঠানো হবে।

চলুন পলিসি কোড দিয়ে শুরু করা যাক, এবং তারপর আমরা এর উপাদানগুলো আরও বিস্তারিতভাবে ব্যাখ্যা করব। স্যাম্পল ডাউনলোডে, আপনি এই 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>

এই নীতিমালার উপাদানগুলোর একটি সংক্ষিপ্ত বিবরণ এখানে দেওয়া হলো। আপনি ‘বার্তা নির্ধারণ নীতি’ (Assign Message policy) -তে এই নীতিমালা সম্পর্কে আরও বিস্তারিত পড়তে পারেন।

  • <AssignMessage name> - এই পলিসিটিকে একটি নাম দেয়। কোনো ফ্লো-তে পলিসিটিকে উল্লেখ করার সময় এই নামটি ব্যবহৃত হয়।
  • <AssignTo> - GeocodingRequest নামে একটি ভেরিয়েবল তৈরি করে। এই ভেরিয়েবলটি সেই রিকোয়েস্ট অবজেক্টকে ধারণ করে, যা ServiceCallout পলিসির মাধ্যমে ব্যাকএন্ডে পাঠানো হবে।
  • <QueryParams> - ব্যাকএন্ড এপিআই কলের জন্য প্রয়োজনীয় কোয়েরি প্যারামিটারগুলো সেট করে। এক্ষেত্রে, জিওকোডিং এপিআই-এর অবস্থান জানার প্রয়োজন হয়, যা একটি পোস্টাল কোড এবং একটি কান্ট্রি আইডি দ্বারা প্রকাশ করা হয়। অ্যাপ ব্যবহারকারী এই তথ্য সরবরাহ করেন এবং আমরা এখান থেকে তা সংগ্রহ করি। এপিআই-এর জন্য sensor প্যারামিটারটি আবশ্যক এবং এটি হয় 'true' অথবা 'false', এবং আমরা এখানে এটিকে 'false' হিসেবে হার্ডকোড করে দিই।
  • <ক্রিয়া> - এক্ষেত্রে, আমরা এপিআই-তে একটি সাধারণ GET অনুরোধ করছি।
  • <AssignVariable> - এই ভেরিয়েবলগুলো এপিআই-তে পাঠানো মানগুলো সংরক্ষণ করে। এই উদাহরণে, ক্লায়েন্টকে ফেরত পাঠানো রেসপন্সে পরবর্তীতে ভেরিয়েবলগুলো অ্যাক্সেস করা হবে।

ServiceCallout দিয়ে অনুরোধটি পাঠান

পলিসি তৈরির ক্রমের পরবর্তী ধাপ হলো একটি ServiceCallout পলিসি তৈরি করা। নিচে তালিকাভুক্ত ServiceCallout পলিসিটি, পূর্ববর্তী AssignMessage পলিসিতে আমাদের তৈরি করা রিকোয়েস্ট অবজেক্টটিকে গুগল জিওকোডিং সার্ভিসে পাঠায় এবং ফলাফলটি GeocodingResponse নামক একটি ভেরিয়েবলে সংরক্ষণ করে।

আগের মতোই, চলুন প্রথমে কোডটি দেখে নেওয়া যাক। এরপর একটি বিস্তারিত ব্যাখ্যা দেওয়া হলো। আপনি সার্ভিস কলআউট পলিসি (Service Callout policy) অংশে এই পলিসিটি সম্পর্কে আরও পড়তে পারেন। স্যাম্পল ডাউনলোডে, আপনি এই 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> - আগের পলিসির মতোই, এটিরও একটি নাম আছে।
  • <অনুরোধ ভেরিয়েবল> - এটি সেই ভেরিয়েবল যা 'AssignMessage' পলিসিতে তৈরি করা হয়েছিল। এটি ব্যাকএন্ড এপিআই-তে পাঠানো অনুরোধটিকে ধারণ করে।
  • <Response> - এই এলিমেন্টটি একটি ভেরিয়েবলের নাম দেয়, যেখানে রেসপন্সটি সংরক্ষিত থাকে। যেমনটি আপনি দেখতে পাবেন, এই ভেরিয়েবলটি পরবর্তীতে ExtractVariables পলিসি দ্বারা অ্যাক্সেস করা হবে।
  • <HTTPTargetConnection> - ব্যাকএন্ড এপিআই-এর টার্গেট ইউআরএল নির্দিষ্ট করে। এক্ষেত্রে, আমরা নির্দিষ্ট করে দিই যে এপিআই একটি JSON রেসপন্স ফেরত দেবে।

এখন আমাদের দুটি পলিসি আছে, একটি ব্যাকএন্ড এপিআই (গুগলের জিওকোডিং এপিআই) ব্যবহার করার জন্য প্রয়োজনীয় অনুরোধের তথ্য নির্দিষ্ট করে, এবং দ্বিতীয়টি প্রকৃতপক্ষে ব্যাকএন্ড এপিআই-তে অনুরোধটি পাঠায়। এরপর, আমরা প্রতিক্রিয়াটি পরিচালনা করব।

ExtractVariables ব্যবহার করে প্রতিক্রিয়াটি পার্স করুন।

ExtractVariables পলিসিটি ServiceCallout পলিসি দ্বারা প্রাপ্ত রেসপন্স মেসেজ থেকে কন্টেন্ট পার্স করার জন্য একটি সহজ পদ্ধতি প্রদান করে। ExtractVariables ব্যবহার করে JSON বা XML পার্স করা যায়, অথবা এটি URI পাথ, HTTP হেডার, কোয়েরি প্যারামিটার এবং ফর্ম প্যারামিটার থেকে কন্টেন্ট এক্সট্র্যাক্ট করতেও ব্যবহার করা যেতে পারে।

এখানে ExtractVariables পলিসির একটি তালিকা দেওয়া হলো। আপনি Extract Variables policy অংশে এই পলিসি সম্পর্কে আরও পড়তে পারেন। স্যাম্পল ডাউনলোডে, আপনি এই 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> - এই এলিমেন্টটি আমাদের প্রয়োজনীয় রেসপন্স ডেটা সংগ্রহ করে এবং সেগুলোকে নামযুক্ত ভেরিয়েবলে রাখে। প্রকৃতপক্ষে, জিওকোডিং এপিআই অক্ষাংশ এবং দ্রাঘিমাংশের চেয়েও অনেক বেশি তথ্য ফেরত দেয়। তবে, এই স্যাম্পলটির জন্য আমাদের শুধু এই মানগুলোই প্রয়োজন। জিওকোডিং এপিআই দ্বারা ফেরত আসা JSON-এর একটি সম্পূর্ণ রেন্ডারিং আপনি এপিআই-এর ডকুমেন্টেশনে দেখতে পারেন। geometry.location.lat এবং geometry.location.lng-এর মানগুলো হলো ফেরত আসা JSON অবজেক্টের অনেকগুলো ফিল্ডের মধ্যে মাত্র দুটি।

বিষয়টি হয়তো স্পষ্ট নয়, কিন্তু এটা দেখা গুরুত্বপূর্ণ যে ExtractVariables দুটি ভেরিয়েবল তৈরি করে, যাদের নামে ভেরিয়েবল প্রিফিক্স (geocoderesponse) এবং পলিসিতে নির্দিষ্ট করা আসল ভেরিয়েবলের নাম থাকে। এই ভেরিয়েবলগুলো এপিআই প্রক্সিতে সংরক্ষিত থাকে এবং প্রক্সি ফ্লো-এর মধ্যে থাকা অন্যান্য পলিসির জন্য উপলব্ধ হবে, যেমনটা আপনি দেখতে পাবেন। ভেরিয়েবলগুলো হলো:

  • ভূ-কোড প্রতিক্রিয়া.অক্ষাংশ
  • ভূ-কোড প্রতিক্রিয়া.দ্রাঘিমাংশ

বেশিরভাগ কাজ এখন সম্পন্ন হয়েছে। আমরা তিনটি পলিসির একটি সংমিশ্রণ তৈরি করেছি যা একটি অনুরোধ গঠন করে, একটি ব্যাকএন্ড এপিআই কল করে এবং ফেরত আসা JSON ডেটা পার্স করে। চূড়ান্ত ধাপে, আমরা ফ্লো-এর এই অংশ থেকে ডেটা অন্য একটি AssignMessage পলিসিতে ফিড করব, দ্বিতীয় ব্যাকএন্ড এপিআই (Google Elevation API) কল করব এবং আমাদের একত্রিত ডেটা অ্যাপ ডেভেলপারের কাছে ফেরত পাঠাব।

AssignMessage ব্যবহার করে দ্বিতীয় অনুরোধটি তৈরি করুন।

নিম্নলিখিত AssignMessage পলিসিটি আমাদের দ্বারা সংরক্ষিত প্রথম ব্যাকএন্ড (Google Geocoding) থেকে প্রাপ্ত ভেরিয়েবলগুলো ব্যবহার করে এবং সেগুলোকে দ্বিতীয় এপিআই (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 (locations) এবং এর মান হলো অক্ষাংশ ও দ্রাঘিমাংশ (কমা দ্বারা পৃথক করা মান)। অন্য প্যারামিটারটি হলো sensor ), যা আবশ্যক এবং এর মান অবশ্যই ট্রু (true) বা ফলস (false) হতে হবে। এই মুহূর্তে সবচেয়ে গুরুত্বপূর্ণ বিষয় হলো, আমরা এখানে যে রিকোয়েস্ট মেসেজটি তৈরি করি তার জন্য কোনো সার্ভিসকলআউট (ServiceCallout) প্রয়োজন হয় না। এই পর্যায়ে আমাদের দ্বিতীয় এপিআই-টিকে সার্ভিসকলআউট থেকে কল করার প্রয়োজন নেই, কারণ আমরা প্রক্সির টার্গেটএন্ডপয়েন্ট (TargetEndpoint) থেকে ব্যাকএন্ড এপিআই-টিকে কল করতে পারি। ভেবে দেখলে, গুগল এলিভেশন এপিআই কল করার জন্য আমাদের প্রয়োজনীয় সমস্ত ডেটা রয়েছে। এই ধাপে তৈরি করা রিকোয়েস্ট মেসেজটির জন্য সার্ভিসকলআউটের প্রয়োজন হয় না, কারণ এটি মূল রিকোয়েস্ট পাইপলাইনের জন্য তৈরি করা হয়েছে, এবং তাই এটি এই এপিআই প্রক্সির জন্য কনফিগার করা রাউটরুল (RouteRule) অনুসরণ করে প্রক্সিএন্ডপয়েন্ট (ProxyEndpoint) দ্বারা টার্গেটএন্ডপয়েন্টে (TargetEndpoint) ফরোয়ার্ড করা হবে। টার্গেটএন্ডপয়েন্ট রিমোট এপিআই-এর সাথে সংযোগটি পরিচালনা করে। মনে রাখবেন যে, এলিভেশন এপিআই-এর জন্য ইউআরএলটি টার্গেটএন্ডপয়েন্টের এইচটিটিপিকানেকশনে সংজ্ঞায়িত করা থাকে। আরও জানতে চাইলে এলিভেশন এপিআই ডকুমেন্টেশন দেখতে পারেন। আমরা পূর্বে যে কোয়েরিপ্যারামসগুলো সংরক্ষণ করেছিলাম, country এবং postalcode , সেগুলোর আর প্রয়োজন নেই, তাই আমরা এখান থেকে সেগুলো সরিয়ে দিচ্ছি।

সংক্ষিপ্ত বিরতি: আবার স্বাভাবিক ছন্দে ফেরা।

এই পর্যায়ে, আপনার মনে প্রশ্ন জাগতে পারে যে আমরা কেন আরেকটি সার্ভিসকলআউট পলিসি তৈরি করছি না। সর্বোপরি, আমরা তো আরেকটি মেসেজ তৈরি করেছি। সেই মেসেজটি কীভাবে টার্গেট অর্থাৎ গুগল এলিভেশন এপিআই-তে পাঠানো হয়? এর উত্তরটি ফ্লো-এর <RouteRule> এলিমেন্টের মধ্যে রয়েছে। ফ্লো-এর <Request> অংশটি এক্সিকিউট হওয়ার পর অবশিষ্ট থাকা রিকোয়েস্ট মেসেজগুলোর সাথে কী করতে হবে, তা <RouteRule> নির্দিষ্ট করে দেয়। এই <RouteRule> দ্বারা নির্দিষ্ট করা TargetEndpoint, এপিআই প্রক্সিকে http://maps.googleapis.com/maps/api/elevation/xml -এ মেসেজটি ডেলিভার করতে বলে।

আপনি যদি নমুনা এপিআই প্রক্সিটি ডাউনলোড করে থাকেন, তাহলে আপনি TargetProxy XML-টি doc-samples/policy-mashup-cookbook/apiproxy/targets/default.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>

এখন, আমাদের শুধু গুগল এলিভেশন এপিআই থেকে পাওয়া প্রতিক্রিয়াটি প্রক্রিয়া করতে হবে এবং আমাদের কাজ শেষ।

প্রতিক্রিয়াটি XML থেকে JSON-এ রূপান্তর করুন

এই উদাহরণে, গুগল এলিভেশন এপিআই থেকে প্রাপ্ত প্রতিক্রিয়াটি এক্সএমএল (XML) হিসেবে ফেরত আসে। বাড়তি সুবিধার জন্য, প্রতিক্রিয়াটিকে এক্সএমএল থেকে জেএসওএন-এ রূপান্তর করতে আমাদের কম্পোজিটে আরও একটি পলিসি যোগ করা যাক।

এই উদাহরণে, রূপান্তরটি সম্পাদন করার জন্য জাভাস্ক্রিপ্ট কোড সম্বলিত একটি রিসোর্স ফাইলসহ GenerateResponse নামক জাভাস্ক্রিপ্ট পলিসি ব্যবহার করা হয়েছে। নিচে GenerateResponse পলিসির সংজ্ঞাটি দেখানো হলো:

<Javascript name="GenerateResponse" timeout="10000">
  <ResourceURL>jsc://GenerateResponse.js</ResourceURL>
</Javascript>

GenerateResponse.js রিসোর্স ফাইলটিতে রূপান্তরটি সম্পাদন করার জন্য ব্যবহৃত জাভাস্ক্রিপ্ট অন্তর্ভুক্ত রয়েছে। আপনি সেই কোডটি doc-samples/policy-mashup-cookbook/apiproxy/resources/JSC/GenerateResponse.js ফাইলটিতে দেখতে পাবেন।

Apigee XML-কে JSON-এ রূপান্তর করার জন্য 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 ফাইলে দেওয়া নির্দেশাবলী অনুসরণ করুন। অথবা, এখানে দেওয়া সংক্ষিপ্ত নির্দেশাবলী অনুসরণ করুন: Using the sample API proxies

সংক্ষেপে, আপনি নিম্নলিখিতভাবে কম্পোজিট এপিআই কল করতে পারেন। আপনার {myorg} এর জায়গায় আপনার প্রতিষ্ঠানের নাম বসান:

$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"

এই রেসপন্সে অ্যাপ ব্যবহারকারীর দেওয়া পোস্টাল কোডের কেন্দ্রের জিওকোডেড অবস্থান এবং সেই জিওকোডেড অবস্থানের উচ্চতা অন্তর্ভুক্ত থাকে। ডেটা দুটি ব্যাকএন্ড এপিআই থেকে সংগ্রহ করে, এপিআই প্রক্সির সাথে সংযুক্ত পলিসিগুলোর সাথে একত্রিত করা হয় এবং একটি একক রেসপন্স হিসেবে ক্লায়েন্টের কাছে ফেরত পাঠানো হয়।

{  
   "country":"us",
   "postalcode":"08008",
   "elevation":{  
      "meters":0.5045232,
      "feet":1.6552599030345978
   },
   "location":{  
      "latitude":39.75007129999999,
      "longitude":-74.1357407
   }
}

সারসংক্ষেপ

এই কুকবুক টপিকটিতে ব্যাখ্যা করা হয়েছে কীভাবে একাধিক ব্যাকএন্ড সোর্স থেকে ডেটার ম্যাশআপ তৈরি করতে পলিসি কম্পোজিশন প্যাটার্ন ব্যবহার করা যায়। পলিসি কম্পোজিশন হলো একটি প্রচলিত প্যাটার্ন যা আপনার এপিআই-তে সৃজনশীল কার্যকারিতা যোগ করার জন্য এপিআই প্রক্সি ডেভেলপমেন্টে ব্যবহৃত হয়।