জাভাস্ক্রিপ্ট সহ প্রোগ্রামিং API প্রক্সি

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

এই বিষয়ে আপনি শিখবেন কীভাবে জাভাস্ক্রিপ্ট ব্যবহার করে একটি প্রতিক্রিয়া বার্তায় গতিশীলভাবে HTTP শিরোনাম যুক্ত করতে হয় এবং কীভাবে একটি JSON প্রতিক্রিয়া পার্স করতে হয় এবং অনুরোধকারী অ্যাপে এর বৈশিষ্ট্যগুলির একটি উপসেট ফেরত দিতে হয়।

ডাউনলোড করুন এবং নমুনা কোড চেষ্টা করুন

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

এই কুকবুক উদাহরণটি একটি API প্রক্সি প্যাটার্নকে চিত্রিত করে যেখানে আপনি জাভাস্ক্রিপ্টে API আচরণ প্রয়োগ করেন। জাভাস্ক্রিপ্ট উদাহরণগুলি আপনাকে দেখানোর জন্য ডিজাইন করা হয়েছে যে কীভাবে সাধারণ ভেরিয়েবল এবং বার্তা সামগ্রীর সাথে কাজ করতে হয়। একটি নমুনা আপনাকে দেখায় কিভাবে ভেরিয়েবল পেতে এবং সেট করতে হয় । দ্বিতীয় উদাহরণটি আপনাকে দেখায় কিভাবে JSON পার্স করতে হয় এবং ফলাফল থেকে একটি বার্তা তৈরি করতে হয়।

দুটি জাভাস্ক্রিপ্ট নমুনা API প্রক্সিতে রয়েছে:

  • setHeaders.js : এই জাভাস্ক্রিপ্ট কয়েকটি ভেরিয়েবলের মান পায় যা সেট করা হয় যখন একটি API প্রক্সি চালু করা হয়। জাভাস্ক্রিপ্ট সেই ভেরিয়েবলগুলিকে প্রতিক্রিয়া বার্তায় যুক্ত করে যাতে আপনি প্রতিটি অনুরোধের জন্য তাদের মান দেখতে পারেন।
  • minimize.js : এই জাভাস্ক্রিপ্ট আপনাকে দেখায় কিভাবে মেসেজ কন্টেন্ট নিয়ে কাজ করতে হয়। এই নমুনার পিছনে ধারণা হল যে একটি পরিষেবা প্রায়ই প্রয়োজনের চেয়ে বেশি ডেটা ফেরত দেয়। সুতরাং, জাভাস্ক্রিপ্ট প্রতিক্রিয়া বার্তা বিশ্লেষণ করে, কিছু আকর্ষণীয় বৈশিষ্ট্য বের করে এবং তারপর প্রতিক্রিয়া বার্তার বিষয়বস্তু তৈরি করতে সেগুলি ব্যবহার করে।

setHeader.js এর জন্য কোড:

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));
context.setVariable("response.header.X-Apigee-ApiProxyName", context.getVariable("apiproxy.name"));
context.setVariable("response.header.X-Apigee-ProxyName", context.getVariable("proxy.name"));
context.setVariable("response.header.X-Apigee-ProxyBasePath", context.getVariable("proxy.basepath"));
context.setVariable("response.header.X-Apigee-ProxyPathSuffix", context.getVariable("proxy.pathsuffix"));
context.setVariable("response.header.X-Apigee-ProxyUrl", context.getVariable("proxy.url"));

minimize.js এর জন্য কোড:

// Parse the respose from the target.
var res = JSON.parse(context.proxyResponse.content);

// Pull out only the information we want to see in the response.
var minimizedResponse = { city: res.root.city,
                          state: res.root.state };
          
// Set the response variable. 
context.proxyResponse.content = JSON.stringify(minimizedResponse);

আপনি প্রসঙ্গ অবজেক্টের মাধ্যমে জাভাস্ক্রিপ্টে ফ্লো ভেরিয়েবল অ্যাক্সেস করতে পারেন। এই অবজেক্টটি এজ জাভাস্ক্রিপ্ট অবজেক্ট মডেলের অংশ। অবজেক্ট মডেল সম্পর্কে বিস্তারিত জানার জন্য, জাভাস্ক্রিপ্ট অবজেক্ট মডেল দেখুন।

আপনি শুরু করার আগে

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

  • নীতিগুলি কী এবং কীভাবে সেগুলি প্রক্সিগুলিতে সংযুক্ত করা যায়৷ নীতিগুলির একটি ভাল ভূমিকার জন্য, দেখুন একটি নীতি কী? .
  • একটি প্রক্সি প্রবাহের গঠন, যেমন ফ্লো কনফিগারিং -এ ব্যাখ্যা করা হয়েছে। ফ্লো আপনাকে একটি API প্রক্সি দ্বারা নীতি নির্বাহ করা হয় সেই ক্রমটি নির্দিষ্ট করতে দেয়৷ এই উদাহরণে, বেশ কয়েকটি নীতি তৈরি করা হয় এবং একটি API প্রক্সি ফ্লোতে যোগ করা হয়।
  • কিভাবে একটি API প্রক্সি প্রকল্প আপনার ফাইল সিস্টেমে সংগঠিত হয়, যেমন API প্রক্সি কনফিগারেশন রেফারেন্সে ব্যাখ্যা করা হয়েছে।
  • XML, JSON এবং JavaScript-এর কাজের জ্ঞান। এই উদাহরণে, আপনি ফাইল সিস্টেমে থাকা XML ফাইলগুলির সাথে API প্রক্সি এবং এর নীতিগুলি তৈরি করেন৷

আপনি যদি নমুনা কোডটি ডাউনলোড করে থাকেন তবে আপনি জাভাস্ক্রিপ্ট-কুকবুক নমুনা ফোল্ডারে এই বিষয়ে আলোচনা করা সমস্ত ফাইল সনাক্ত করতে পারেন। নিম্নলিখিত বিভাগে নমুনা কোড বিশদভাবে আলোচনা.

প্রক্সি ফ্লো বোঝা

একটি API প্রক্সিতে চালানোর জন্য JavaScript পেতে, আপনাকে 'স্টেপ' নামক একটি নীতি সংযুক্তি ব্যবহার করে এটিকে একটি ফ্লোতে সংযুক্ত করতে হবে। জাভাস্ক্রিপ্ট (নোট ক্যাপিটালাইজেশন) টাইপের একটি নীতিতে কেবল একটি জাভাস্ক্রিপ্ট ফাইলের নামের একটি উল্লেখ থাকে। আপনি ResourceURL উপাদান ব্যবহার করে একটি JavaScript ফাইলে নীতি নির্দেশ করেন।

উদাহরণস্বরূপ, নিম্নলিখিত নীতি setHeader.js নামে জাভাস্ক্রিপ্ট ফাইলের উল্লেখ করে।

<Javascript name='setHeaders' timeLimit='200'>
    <ResourceURL>setHeaders.js</ResourceURL>
</Javascript>

আপনি এই নীতিটিকে একটি API প্রক্সি ফ্লোতে সংযুক্ত করতে পারেন যেমন আপনি অন্য কোনো নীতির ধরন করবেন৷ API প্রক্সি ফ্লোতে নীতিটি সংযুক্ত করে, আপনি নির্দেশ করেন যে জাভাস্ক্রিপ্টটি কোথায় কার্যকর করা উচিত। এটি আপনাকে জাভাস্ক্রিপ্ট চালাতে সক্ষম করে যা অনুরোধ বার্তা বা প্রতিক্রিয়া বার্তাগুলির সাথে ইন্টারঅ্যাক্ট করে কারণ সেই বার্তাগুলি API প্রক্সির মাধ্যমে 'প্রবাহ' হয়। এই উদাহরণে, উভয় জাভাস্ক্রিপ্ট প্রতিক্রিয়া প্রবাহে কার্যকর করে, যেহেতু নীতিগুলি দুটি কাজ করে: প্রতিক্রিয়া বার্তায় HTTP শিরোনাম সেট করুন এবং Apigee Edge অনুরোধকারী অ্যাপে ফিরে আসা প্রতিক্রিয়া বার্তাটিকে 'মিনিমাইজ' করুন।

আপনি ম্যানেজমেন্ট UI-তে এই ফ্লো কনফিগারেশনটি খুললে, আপনি নীচে ফ্লো কনফিগারেশন দেখতে পাবেন।

নেভিগেটর প্যানে প্রক্সি এন্ডপয়েন্ট > ডিফল্ট > পোস্টফ্লো নির্বাচন করুন।

'ডিফল্ট' নামের প্রক্সিএন্ডপয়েন্টের জন্য সংশ্লিষ্ট XML কনফিগারেশন নিচে দেখানো হয়েছে।

<ProxyEndpoint name="default">
  <PostFlow>
    <Response>
      <!-- Steps reference policies under /apiproxy/policies -->
      <!-- First, set a few HTTP headers with variables for this transaction. -->
      <Step><Name>setHeaders</Name></Step>
      <!-- Next, transform the response from XML to JSON for easier parsing with JavaScript -->
      <Step><Name>transform</Name></Step>
      <!-- Finally, use JavaScript to create minimized response with just city and state. -->
      <Step><Name>minimize</Name></Step>
    </Response>
  </PostFlow>
  <HTTPProxyConnection>
        <!-- BasePath defines the network address for this API proxy. See the script 'invoke.sh' to see how the complete URL for this API proxy is constructed.-->
    <BasePath>/javascript-cookbook</BasePath>
     <!-- Set VirtualHost to 'secure' to have this API proxy listen on HTTPS. -->
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

এখানে প্রবাহের উপাদানগুলির একটি সারাংশ রয়েছে৷

  • <অনুরোধ> - <অনুরোধ> উপাদানটি বেশ কয়েকটি <পদক্ষেপ> উপাদান নিয়ে গঠিত। প্রতিটি ধাপে আপনি এই বিষয়ের বাকি অংশের মাধ্যমে তৈরি করা নীতিগুলির একটিকে কল করে৷ এই নীতিগুলি API প্রক্সি ফ্লোতে একটি JavaScript সংযুক্ত করে এবং নীতি সংযুক্তির অবস্থান নির্ধারণ করে কখন JavaScript কার্যকর হয়৷
  • <প্রতিক্রিয়া> - <প্রতিক্রিয়া> উপাদানটিতে <পদক্ষেপ>ও রয়েছে। এই পদক্ষেপগুলি এমন নীতিগুলিকেও কল করে যেগুলি লক্ষ্য থেকে চূড়ান্ত প্রতিক্রিয়া প্রক্রিয়াকরণের জন্য দায়ী (যা এই উদাহরণে Apigee-এর উপহাস পরিষেবা লক্ষ্য-- /apiproxy/targets/default.xml default.xml-এর অধীনে HTTPTargetConnection সেটিংটি নোট করুন।)
  • <HTTPPproxyConnection> - হোস্ট এবং URI পাথ নির্দিষ্ট করে যা নেটওয়ার্ক ঠিকানা নির্ধারণ করে যে অ্যাপগুলি এই API ব্যবহার করতে কল করে।
  • <RouteRule> - এই উপাদানটি নির্দিষ্ট করে যে কোন TargetEndpoint কনফিগারেশনটি ProxyEndpoint দ্বারা আহ্বান করা হয়েছে।

একটি প্রক্সিতে জাভাস্ক্রিপ্ট কোড যোগ করা হচ্ছে

জাভাস্ক্রিপ্ট (যেমন পাইথন স্ক্রিপ্ট, জাভা JAR ফাইল, XSLT ফাইল ইত্যাদি) সম্পদ হিসাবে সংরক্ষণ করা হয়। আপনি যখন জাভাস্ক্রিপ্টের সাথে কাজ শুরু করেন তখন API প্রক্সিতে আপনার জাভাস্ক্রিপ্ট ফাইলগুলি সংরক্ষণ করা সবচেয়ে সহজ। আপনি যতটা অগ্রসর হবেন, জাভাস্ক্রিপ্ট যতটা সম্ভব জেনেরিক এবং পুনঃব্যবহারযোগ্য করা উচিত এবং তারপর পরিবেশ বা সংস্থার স্তরে সংরক্ষণ করা উচিত। এটি আপনাকে একাধিক API প্রক্সিতে একই জাভাস্ক্রিপ্ট ফাইল সংরক্ষণ করতে বাধা দেয়, যা দ্রুত নিয়ন্ত্রণের অযোগ্য হয়ে উঠতে পারে।

সংস্থা এবং পরিবেশ স্তরে সম্পদ সংরক্ষণের বিষয়ে জানতে, সম্পদ ফাইলগুলি দেখুন।

চেষ্টা করে দেখুন

প্রক্সি স্থাপন এবং কল করার নির্দেশাবলীর জন্য, জাভাস্ক্রিপ্ট কুকবুক README দেখুন।

API প্রক্সি আমদানি এবং স্থাপন করা হচ্ছে

আপনি পরিবর্তন করার পরে, আপনি API প্রক্সি সংরক্ষণ করতে পারেন API প্রক্সি বিল্ডার টুল ব্যবস্থাপনা UI- তে।

অথবা আপনি /api-platform-samples/doc-samples/javascript-cookbook ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালাতে পারেন।

$ sh deploy.sh

জাভাস্ক্রিপ্ট পরীক্ষা করা হচ্ছে

/api-platform-samples/doc-samples/javascript-cookbook ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালান।

$ sh invoke.sh

কার্ল পতাকা -v জাভাস্ক্রিপ্ট দ্বারা পরিবর্তিত প্রতিক্রিয়া বার্তায় HTTP শিরোনাম দেখতে শেল স্ক্রিপ্টে ব্যবহৃত হয়।

আপনি নিম্নলিখিত হিসাবে সরাসরি একটি অনুরোধ জমা দিতে পারেন:

$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook 

জাভাস্ক্রিপ্ট সঠিকভাবে কার্যকর হলে, আপনি নিম্নলিখিত মত একটি প্রতিক্রিয়া দেখতে পাবেন:

< X-Apigee-Demo-Target: default
< X-Apigee-Demo-ApiProxyName: simple-javascript
< X-Apigee-Demo-ProxyName: default
< X-Apigee-Demo-ProxyBasePath: /javascript-cookbook
< X-Apigee-Demo-ProxyPathSuffix: /xml
< X-Apigee-Demo-ProxyUrl: http://rrt331ea.us-ea.4.apigee.com/javascript-cookbook/xml
 
{"city":"San Jose","state":"CA"}

আপনি এখন নতুন জিনিস চেষ্টা করার জন্য জাভাস্ক্রিপ্ট পরিবর্তন করতে পারেন, API প্রক্সি পুনরায় স্থাপন করতে পারেন এবং একই অনুরোধ জমা দিয়ে ফলাফল যাচাই করতে পারেন। আপনার পরিবর্তনগুলি কার্যকর করার জন্য সর্বদা নিশ্চিত করুন যে আপনি API প্রক্সিটি স্থাপন করেছেন যাতে আপনার JavaScript রয়েছে।

স্ক্রিপ্ট ত্রুটি

জাভাস্ক্রিপ্ট লেখার সময় আপনি অনিবার্যভাবে ত্রুটি দেখতে পাবেন। জাভাস্ক্রিপ্ট ত্রুটিগুলির ফর্ম্যাট যা আপনি একটি API প্রক্সি দ্বারা জারি করা দেখতে পাবেন নীচে দেখানো হয়েছে৷

{  
   "fault":{  
      "faultstring":"Execution of rewriteTargetUrl failed with error: Javascript runtime error: \"TypeError: Cannot find function getVariable in object TARGET_REQ_FLOW. (rewriteTargetUrl_js#1). at line 1 \"",
      "detail":{  
         "errorcode":"steps.javascript.ScriptExecutionFailed"
      }
   }
}

কখন জাভাস্ক্রিপ্ট ব্যবহার করবেন

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

যদি কর্মক্ষমতা কাস্টম কার্যকারিতার জন্য একটি উদ্বেগ হয়, যেখানে সম্ভব জাভা ব্যবহার করুন।

সারাংশ

এই কুকবুক বিষয়ে, আপনি শিখেছেন কীভাবে জাভাস্ক্রিপ্ট কাস্টম আচরণ বাস্তবায়নের জন্য একটি API প্রক্সি কনফিগারেশনে অন্তর্ভুক্ত করা যেতে পারে। নমুনা দ্বারা বাস্তবায়িত কাস্টম আচরণ প্রদর্শন করে কিভাবে পেতে এবং ভেরিয়েবল এবং কিভাবে JSON পার্স করতে হয় এবং কাস্টম প্রতিক্রিয়া বার্তা তৈরি করতে হয়।