আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
কী
এই পলিসি আপনাকে কাস্টম জাভাস্ক্রিপ্ট কোড যোগ করার সুযোগ দেয়, যা একটি এপিআই প্রক্সি ফ্লো-এর প্রেক্ষাপটে কার্যকর হয়। আপনার কাস্টম জাভাস্ক্রিপ্ট কোডে, আপনি Apigee Edge জাভাস্ক্রিপ্ট অবজেক্ট মডেলের অবজেক্ট, মেথড এবং প্রোপার্টিগুলো ব্যবহার করতে পারেন। এই অবজেক্ট মডেল আপনাকে প্রক্সি ফ্লো প্রেক্ষাপটে ভ্যারিয়েবল গেট, সেট এবং রিমুভ করার সুবিধা দেয়। এছাড়াও আপনি অবজেক্ট মডেলের সাথে প্রদত্ত বেসিক ক্রিপ্টোগ্রাফিক ফাংশনগুলোও ব্যবহার করতে পারেন।
সম্পর্কে
জাভাস্ক্রিপ্ট পলিসির অনেক ব্যবহার রয়েছে। উদাহরণস্বরূপ, আপনি ফ্লো ভেরিয়েবল পেতে ও সেট করতে, কাস্টম লজিক চালাতে ও ফল্ট হ্যান্ডলিং করতে, রিকোয়েস্ট বা রেসপন্স থেকে ডেটা এক্সট্র্যাক্ট করতে, ডাইনামিকভাবে ব্যাকএন্ড টার্গেট ইউআরএল এডিট করতে এবং আরও অনেক কিছু করতে পারেন। এই পলিসি আপনাকে এমন কাস্টম আচরণ প্রয়োগ করার সুযোগ দেয় যা অন্য কোনো স্ট্যান্ডার্ড এজ পলিসির আওতায় পড়ে না। প্রকৃতপক্ষে, আপনি জাভাস্ক্রিপ্ট পলিসি ব্যবহার করে AssignMessage এবং ExtractVariable-এর মতো অন্যান্য পলিসি দ্বারা প্রয়োগ করা অনেক আচরণই অর্জন করতে পারেন।
জাভাস্ক্রিপ্ট পলিসির একটি ব্যবহার যা আমরা সুপারিশ করি না, তা হলো লগিং। মেসেজ লগিং পলিসি স্প্ল্যাঙ্ক, সুমো এবং লগলি-র মতো থার্ড-পার্টি লগিং প্ল্যাটফর্মে লগ করার জন্য অনেক বেশি উপযুক্ত। এছাড়া, ক্লায়েন্টের কাছে রেসপন্স ফেরত পাঠানোর পর পোস্টক্লায়েন্টফ্লো (PostClientFlow)-তে মেসেজ লগিং পলিসিটি এক্সিকিউট করার মাধ্যমে আপনি এপিআই প্রক্সির পারফরম্যান্স উন্নত করতে পারেন।
জাভাস্ক্রিপ্ট পলিসি আপনাকে এক্সিকিউট করার জন্য একটি জাভাস্ক্রিপ্ট সোর্স ফাইল নির্দিষ্ট করার সুযোগ দেয়, অথবা আপনি <Source> এলিমেন্ট ব্যবহার করে সরাসরি পলিসির কনফিগারেশনে জাভাস্ক্রিপ্ট কোড অন্তর্ভুক্ত করতে পারেন। উভয় ক্ষেত্রেই, পলিসিটি যে স্টেপের সাথে সংযুক্ত, সেই স্টেপটি এক্সিকিউট হওয়ার সময় জাভাস্ক্রিপ্ট কোডটিও এক্সিকিউট হয়। সোর্স ফাইল বিকল্পটির ক্ষেত্রে, সোর্স কোডটি সর্বদা প্রক্সি বান্ডেলের মধ্যে একটি স্ট্যান্ডার্ড লোকেশনে সংরক্ষিত থাকে: apiproxy/resources/jsc । অথবা, আপনি এনভায়রনমেন্ট বা অর্গানাইজেশন লেভেলের একটি রিসোর্স ফাইলে সোর্স কোডটি সংরক্ষণ করতে পারেন। নির্দেশাবলীর জন্য, রিসোর্স ফাইলস দেখুন। এছাড়াও আপনি Apigee UI প্রক্সি এডিটরের মাধ্যমে আপনার জাভাস্ক্রিপ্ট আপলোড করতে পারেন।
জাভাস্ক্রিপ্ট সোর্স ফাইলের এক্সটেনশন অবশ্যই .js হতে হবে।
জাভাস্ক্রিপ্টের বর্তমানে সমর্থিত সংস্করণটি জানতে সমর্থিত সফটওয়্যার এবং সমর্থিত সংস্করণসমূহ দেখুন।
ভিডিও
জাভাস্ক্রিপ্ট পলিসি ব্যবহার করে কীভাবে একটি কাস্টম পলিসি এক্সটেনশন তৈরি করতে হয়, তা জানতে একটি সংক্ষিপ্ত ভিডিও দেখুন।
নমুনা
লক্ষ্য URL পুনরায় লিখুন
এখানে একটি সাধারণ ব্যবহারের উদাহরণ দেওয়া হলো: একটি রিকোয়েস্ট বডি থেকে ডেটা বের করে, সেটিকে একটি ফ্লো ভেরিয়েবলে সংরক্ষণ করা এবং প্রক্সি ফ্লো-এর অন্য কোথাও সেই ফ্লো ভেরিয়েবলটি ব্যবহার করা। ধরা যাক, আপনার একটি অ্যাপ আছে যেখানে ব্যবহারকারী একটি HTML ফর্মে তার নাম লিখে সাবমিট করেন। আপনি চান যে এপিআই প্রক্সিটি ফর্মের ডেটা বের করে ব্যাকএন্ড সার্ভিস কল করার জন্য ব্যবহৃত URL-এ ডাইনামিকভাবে যোগ করে দিক। একটি জাভাস্ক্রিপ্ট পলিসিতে আপনি এটি কীভাবে করবেন?
দ্রষ্টব্য: আপনি যদি এই উদাহরণটি চেষ্টা করে দেখতে চান, আমরা ধরে নিচ্ছি যে আপনি প্রক্সি এডিটরে একটি নতুন প্রক্সি তৈরি করেছেন। এটি তৈরি করার সময়, এর ব্যাকএন্ড সার্ভিস ইউআরএল হিসেবে শুধু http://www.example.com দিন। এই উদাহরণের জন্য, আমরা ব্যাকএন্ড ইউআরএলটি ডাইনামিকভাবে রিরাইট করব। আপনি যদি নতুন প্রক্সি তৈরি করতে না জানেন, তাহলে গেটিং স্টার্টেড টিউটোরিয়ালটি দেখুন।
- Edge UI-তে, প্রক্সি এডিটরে আপনার তৈরি করা প্রক্সিটি খুলুন।
- ডেভেলপ ট্যাবটি নির্বাচন করুন।
- New মেনু থেকে New Script নির্বাচন করুন।
- ডায়ালগ বক্সে জাভাস্ক্রিপ্ট নির্বাচন করুন এবং স্ক্রিপ্টটির একটি নাম দিন, যেমন
js-example। - নিচের কোডটি কোড এডিটরে পেস্ট করুন এবং প্রক্সিটি সেভ করুন। লক্ষ্য করার মতো গুরুত্বপূর্ণ বিষয়টি হলো
contextঅবজেক্ট। এই অবজেক্টটি প্রক্সি ফ্লো-এর যেকোনো জায়গায় জাভাস্ক্রিপ্ট কোডের জন্য উপলব্ধ থাকে। এটি ফ্লো-নির্দিষ্ট কনস্ট্যান্ট পেতে, দরকারি গেট/সেট মেথড কল করতে এবং আরও অনেক অপারেশনের জন্য ব্যবহৃত হয়। এই অবজেক্ট অংশটি এজ-এর জাভাস্ক্রিপ্ট অবজেক্ট মডেলের অন্তর্ভুক্ত। আরও মনে রাখবেন যে,target.urlফ্লো ভ্যারিয়েবলটি একটি বিল্ট-ইন, রিড/রাইট ভ্যারিয়েবল যা টার্গেট রিকোয়েস্ট ফ্লো-তে অ্যাক্সেসযোগ্য। যখন আমরা এপিআই ইউআরএল দিয়ে ওই ভ্যারিয়েবলটি সেট করি, এজ সেই ইউআরএল-এ তার ব্যাকএন্ড কল করে। আমরা মূলত আসল টার্গেট ইউআরএলটি নতুন করে লিখেছি, যা ছিল প্রক্সি তৈরি করার সময় আপনার নির্দিষ্ট করা ইউআরএল (যেমন, http://www.example.com)।if (context.flow=="PROXY_REQ_FLOW") { var username = context.getVariable("request.formparam.user"); context.setVariable("info.username", username); } if (context.flow=="TARGET_REQ_FLOW") { context.setVariable("request.verb", "GET"); var name = context.getVariable("info.username"); var url = "http://mocktarget.apigee.net/" context.setVariable("target.url", url + "?user=" + name); }
- নতুন নীতি মেনু থেকে জাভাস্ক্রিপ্ট নির্বাচন করুন।
- পলিসিটির একটি নাম দিন, যেমন
target-rewrite। ডিফল্টগুলো গ্রহণ করুন এবং পলিসিটি সেভ করুন। - আপনি নেভিগেটরে প্রক্সি এন্ডপয়েন্ট প্রিফ্লো নির্বাচন করলে দেখতে পাবেন যে পলিসিটি সেই ফ্লোতে যুক্ত করা হয়েছে।
- নেভিগেটরে, টার্গেট এন্ডপয়েন্ট প্রিফ্লো আইকনটি নির্বাচন করুন।
- নেভিগেটর থেকে, ফ্লো এডিটরে থাকা টার্গেট এন্ডপয়েন্টের রিকোয়েস্ট সাইডে জাভাস্ক্রিপ্ট পলিসিটি ড্র্যাগ করে দিন।
- সংরক্ষণ করুন।
- আপনার সঠিক অর্গ নেম এবং প্রক্সি নেম যথাযথভাবে বসিয়ে এইভাবে API-টি কল করুন:
curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST -d 'user=Will' http://myorg-test.apigee.net/js-example
শেষ একটি বিষয়, চলুন এই উদাহরণে ব্যবহৃত জাভাস্ক্রিপ্ট পলিসির এক্সএমএল ডেফিনিশনটি দেখে নেওয়া যাক। এখানে লক্ষণীয় গুরুত্বপূর্ণ বিষয়টি হলো, কোন জাভাস্ক্রিপ্ট সোর্স ফাইলটি এক্সিকিউট করতে হবে তা নির্দিষ্ট করার জন্য <ResourceURL> এলিমেন্টটি ব্যবহৃত হয়। যেকোনো জাভাস্ক্রিপ্ট সোর্স ফাইলের জন্য এই একই প্যাটার্ন ব্যবহার করা হয়: jsc://filename.js । যদি আপনার জাভাস্ক্রিপ্ট কোডে ইনক্লুড করার প্রয়োজন হয়, তবে আপনি এক বা একাধিক <IncludeURL> এলিমেন্ট ব্যবহার করতে পারেন, যেমনটি এই রেফারেন্সের পরবর্তী অংশে বর্ণনা করা হয়েছে।
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="target-rewrite"> <DisplayName>target-rewrite</DisplayName> <Properties/> <ResourceURL>jsc://js-example.js</ResourceURL> </Javascript>
জাভাস্ক্রিপ্ট থেকে প্রপার্টির মান পুনরুদ্ধার করুন
আপনি কনফিগারেশনে একটি <Property> এলিমেন্ট যোগ করতে পারেন, তারপর রানটাইমে জাভাস্ক্রিপ্ট ব্যবহার করে এলিমেন্টটির মান পুনরুদ্ধার করতে পারেন।
জাভাস্ক্রিপ্ট কোড থেকে প্রপার্টিটি অ্যাক্সেস করার জন্য নামটি নির্দিষ্ট করতে এলিমেন্টের name অ্যাট্রিবিউট ব্যবহার করুন। <Property> এলিমেন্টের value (ওপেনিং এবং ক্লোজিং ট্যাগের ভেতরের মান) হলো সেই আক্ষরিক মান যা জাভাস্ক্রিপ্ট গ্রহণ করবে।
জাভাস্ক্রিপ্টে, `policy` প্রপার্টির মান ` Properties অবজেক্টের একটি প্রপার্টি হিসেবে অ্যাক্সেস করার মাধ্যমে পাওয়া যায়, যেমনটি নিচে দেখানো হয়েছে:
- প্রপার্টিটি কনফিগার করুন। এখানে, প্রপার্টির মান হলো
response.status.codeভেরিয়েবলটি।<Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="JavascriptURLRewrite"> <DisplayName>JavascriptURLRewrite</DisplayName> <Properties> <Property name="source">response.status.code</Property> </Properties> <ResourceURL>jsc://JavascriptURLRewrite.js</ResourceURL> </Javascript>
- জাভাস্ক্রিপ্ট ব্যবহার করে প্রপার্টিটি পুনরুদ্ধার করুন। এখানে, পুনরুদ্ধার করা মানটি—যা একটি ভেরিয়েবলের নাম—তারপর
getVariableফাংশন দ্বারা ভেরিয়েবলটির মান পুনরুদ্ধার করতে ব্যবহৃত হয়।var responseCode = properties.source; // Returns "response.status.code" var value = context.getVariable(responseCode); // Get the value of response.status.code context.setVariable("response.header.x-target-response-code", value);
ত্রুটি পরিচালনা
জাভাস্ক্রিপ্ট কলআউটে ব্যবহারযোগ্য এরর হ্যান্ডলিং টেকনিকের উদাহরণ ও আলোচনার জন্য Apigee কমিউনিটিতে এই পোস্টটি দেখুন। Apigee কমিউনিটিতে প্রদত্ত পরামর্শগুলো শুধুমাত্র তথ্যের জন্য এবং এগুলো Apigee কর্তৃক সুপারিশকৃত সেরা অনুশীলন হিসেবে আবশ্যিকভাবে বিবেচিত হবে না।
উপাদান রেফারেন্স
এলিমেন্ট রেফারেন্সটি জাভাস্ক্রিপ্ট পলিসির উপাদান এবং অ্যাট্রিবিউটগুলো বর্ণনা করে।
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="JavaScript-1"> <DisplayName>JavaScript 1</DisplayName> <Properties> <Property name="propName">propertyValue</Property> </Properties> <SSLInfo> <Enabled>trueFalse</Enabled> <ClientAuthEnabled>trueFalse</ClientAuthEnabled> <KeyStore>ref://keystoreRef</KeyStore> <KeyAlias>keyAlias</KeyAlias> <TrustStore>ref://truststoreRef</TrustStore> </SSLInfo> <IncludeURL>jsc://a-javascript-library-file</IncludeURL> <ResourceURL>jsc://my-javascript-source-file</ResourceURL> <Source>insert_js_code_here</Source> </Javascript>
<জাভাস্ক্রিপ্ট> অ্যাট্রিবিউট
<Javascript name="Javascript-1" enabled="true" continueOnError="false" async="false" timeLimit="200">
নিম্নলিখিত বৈশিষ্ট্যগুলো এই পলিসির জন্য নির্দিষ্ট।
| বৈশিষ্ট্য | বর্ণনা | ডিফল্ট | উপস্থিতি |
|---|---|---|---|
| সময়সীমা | স্ক্রিপ্টটি সর্বোচ্চ কত সময় (মিলিসেকেন্ডে) চলতে পারবে, তা নির্দিষ্ট করে। উদাহরণস্বরূপ, যদি ২০০ মিলিসেকেন্ডের সীমা অতিক্রম করা হয়, তাহলে পলিসিটি এই ত্রুটিটি দেখায়: দ্রষ্টব্য: ফ্রি ট্রায়াল অ্যাকাউন্টের ক্ষেত্রে, কার্য সম্পাদনের সময় ২০০ মিলিসেকেন্ডে সীমিত। | প্রযোজ্য নয় | প্রয়োজনীয় |
নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:
| বৈশিষ্ট্য | বর্ণনা | ডিফল্ট | উপস্থিতি |
|---|---|---|---|
name | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
| ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
|---|---|
| উপস্থিতি | ঐচ্ছিক |
| টাইপ | স্ট্রিং |
<IncludeURL> উপাদান
<ResourceURL> বা <Source> এলিমেন্টের মাধ্যমে নির্দিষ্ট করা প্রধান জাভাস্ক্রিপ্ট ফাইলের ডিপেন্ডেন্সি হিসেবে লোড করার জন্য একটি জাভাস্ক্রিপ্ট লাইব্রেরি ফাইল নির্দিষ্ট করে। স্ক্রিপ্টগুলো পলিসিতে তালিকাভুক্ত ক্রমানুসারে মূল্যায়ন করা হবে। আপনার কোড জাভাস্ক্রিপ্ট অবজেক্ট মডেলের অবজেক্ট, মেথড এবং প্রোপার্টি ব্যবহার করতে পারে।
অতিরিক্ত <IncludeURL> এলিমেন্ট ব্যবহার করে একাধিক জাভাস্ক্রিপ্ট ডিপেন্ডেন্সি রিসোর্স অন্তর্ভুক্ত করুন।
<IncludeURL>jsc://my-javascript-dependency.js</IncludeURL>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | ঐচ্ছিক |
| প্রকার: | স্ট্রিং |
উদাহরণ
নমুনা বিভাগে মৌলিক উদাহরণটি দেখুন।
<সম্পত্তি> উপাদান
এমন একটি প্রপার্টি নির্দিষ্ট করে যা রানটাইমে জাভাস্ক্রিপ্ট কোড থেকে অ্যাক্সেস করা যায়।
<Properties> <Property name="propName">propertyValue</Property> </Properties>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | ঐচ্ছিক |
| প্রকার: | স্ট্রিং |
বৈশিষ্ট্য
| বৈশিষ্ট্য | বর্ণনা | ডিফল্ট | উপস্থিতি |
|---|---|---|---|
| নাম | প্রপার্টির নাম নির্দিষ্ট করে। | প্রযোজ্য নয় | প্রয়োজনীয়। |
উদাহরণ
নমুনা বিভাগে উদাহরণটি দেখুন।
<রিসোর্সইউআরএল> উপাদান
এটি সেই প্রধান জাভাস্ক্রিপ্ট ফাইলকে নির্দিষ্ট করে যা এপিআই ফ্লো-তে এক্সিকিউট হবে। আপনি এই ফাইলটি এপিআই প্রক্সি স্কোপে (এপিআই প্রক্সি বান্ডেলের মধ্যে /apiproxy/resources/jsc এর অধীনে অথবা এপিআই প্রক্সি এডিটরের নেভিগেটর প্যানেলের স্ক্রিপ্টস সেকশনে), অথবা রিসোর্স ফাইলস অংশে বর্ণিত পদ্ধতি অনুযায়ী একাধিক এপিআই প্রক্সির মধ্যে পুনঃব্যবহারের জন্য অর্গানাইজেশন বা এনভায়রনমেন্ট স্কোপে সংরক্ষণ করতে পারেন। আপনার কোড জাভাস্ক্রিপ্ট অবজেক্ট মডেলের অবজেক্ট, মেথড এবং প্রোপার্টি ব্যবহার করতে পারে।
<ResourceURL>jsc://my-javascript.js</ResourceURL>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | <ResourceURL> অথবা <Source> যেকোনো একটি আবশ্যক। যদি <ResourceURL> এবং <Source> উভয়ই উপস্থিত থাকে, তবে <ResourceURL> উপেক্ষা করা হয়। |
| প্রকার: | স্ট্রিং |
উদাহরণ
নমুনা বিভাগে মৌলিক উদাহরণটি দেখুন।
<উৎস> উপাদান
এটি আপনাকে পলিসির XML কনফিগারেশনে সরাসরি জাভাস্ক্রিপ্ট যুক্ত করার সুযোগ দেয়। API ফ্লোতে পলিসিটি এক্সিকিউট হওয়ার সময় এই যুক্ত করা জাভাস্ক্রিপ্ট কোডটিও কার্যকর হয়।
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | <ResourceURL> অথবা <Source> যেকোনো একটি আবশ্যক। যদি <ResourceURL> এবং <Source> উভয়ই উপস্থিত থাকে, তবে <ResourceURL> উপেক্ষা করা হয়। |
| প্রকার: | স্ট্রিং |
উদাহরণ
<Javascript name='JS-ParseJsonHeaderFullString' timeLimit='200' > <Properties> <Property name='inboundHeaderName'>specialheader</Property> <Property name='outboundVariableName'>json_stringified</Property> </Properties> <Source> var varname = 'request.header.' + properties.inboundHeaderName + '.values.string'; var h = context.getVariable(varname); if (h) { h = JSON.parse(h); h.augmented = (new Date()).valueOf(); var v = JSON.stringify(h, null, 2) + '\n'; // further indent var r = new RegExp('^(\S*)','mg'); v= v.replace(r,' $1'); context.setVariable(properties.outboundVariableName, v); } </Source> </Javascript>
<SSLInfo> উপাদান
জাভাস্ক্রিপ্ট পলিসি দ্বারা তৈরি সমস্ত HTTP ক্লায়েন্ট ইনস্ট্যান্সের জন্য TLS কনফিগার করতে ব্যবহৃত প্রোপার্টিগুলো নির্দিষ্ট করে।
<SSLInfo> <Enabled>trueFalse</Enabled> <ClientAuthEnabled>trueFalse</ClientAuthEnabled> <KeyStore>ref://keystoreRef</KeyStore> <KeyAlias>keyAlias</KeyAlias> <TrustStore>ref://truststoreRef</TrustStore> </SSLInfo>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | ঐচ্ছিক |
| প্রকার: | স্ট্রিং |
একটি HTTP ক্লায়েন্টের জন্য TLS কনফিগার করার প্রক্রিয়াটি TargetEndpoint/TargetServer-এর জন্য TLS কনফিগার করার প্রক্রিয়ার মতোই। আরও তথ্যের জন্য Edge থেকে ব্যাকএন্ডে TLS কনফিগার করা দেখুন।
ব্যবহারের নির্দেশাবলী
একটি জাভাস্ক্রিপ্ট পলিসিতে কোনো প্রকৃত কোড থাকে না। এর পরিবর্তে, একটি জাভাস্ক্রিপ্ট পলিসি একটি জাভাস্ক্রিপ্ট 'রিসোর্স'-কে রেফারেন্স করে এবং এপিআই ফ্লো-এর সেই ধাপটি নির্ধারণ করে যেখানে জাভাস্ক্রিপ্টটি এক্সিকিউট হবে। আপনি ম্যানেজমেন্ট UI প্রক্সি এডিটরের মাধ্যমে আপনার স্ক্রিপ্ট আপলোড করতে পারেন, অথবা আপনার স্থানীয়ভাবে তৈরি করা এপিআই প্রক্সিগুলোর /resources/jsc ডিরেক্টরিতে এটি অন্তর্ভুক্ত করতে পারেন।
জাভাস্ক্রিপ্ট পলিসি কোড ডিবাগ করা
ট্রেস টুলের ট্রানজ্যাকশন আউটপুট প্যানেলে ডিবাগ তথ্য আউটপুট করতে print() ফাংশনটি ব্যবহার করুন। বিস্তারিত বিবরণ এবং উদাহরণের জন্য, “জাভাস্ক্রিপ্ট print() স্টেটমেন্ট দিয়ে ডিবাগ” দেখুন।
ট্রেসে প্রিন্ট স্টেটমেন্ট দেখতে:
- ট্রেস টুলটি খুলুন এবং আপনার জাভাস্ক্রিপ্ট পলিসি ধারণকারী একটি প্রক্সির জন্য ট্রেস সেশন শুরু করুন।
- প্রক্সিকে ডাকুন।
- ট্রেস টুলে, আউটপুট প্যানেলটি খোলার জন্য ‘আউটপুট ফ্রম অল ট্রানজ্যাকশনস’- এ ক্লিক করুন।

- আপনার প্রিন্ট স্টেটমেন্টগুলো এই প্যানেলে প্রদর্শিত হবে।
আপনি ট্রেস টুলে ডিবাগ তথ্য আউটপুট করতে print() ফাংশনটি ব্যবহার করতে পারেন। এই ফাংশনটি সরাসরি জাভাস্ক্রিপ্ট অবজেক্ট মডেলের মাধ্যমে উপলব্ধ। বিস্তারিত জানতে, " প্রিন্ট() স্টেটমেন্ট ব্যবহার করে জাভাস্ক্রিপ্ট ডিবাগ করুন " দেখুন।
প্রবাহ পরিবর্তনশীল
এই পলিসি ডিফল্টরূপে কোনো ভেরিয়েবল পূরণ করে না; তবে, আপনি আপনার জাভাস্ক্রিপ্ট কোডে কন্টেক্সট অবজেক্টের মেথড কল করার মাধ্যমে ফ্লো ভেরিয়েবল সেট (এবং গেট) করতে পারেন। একটি সাধারণ প্যাটার্ন দেখতে এইরকম:
context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"))
কন্টেক্সট অবজেক্টটি Apigee Edge জাভাস্ক্রিপ্ট অবজেক্ট মডেলের একটি অংশ।
ত্রুটির রেফারেন্স
এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷
রানটাইম ত্রুটি
নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷
| ফল্ট কোড | HTTP স্থিতি | কারণ | ঠিক করুন |
|---|---|---|---|
steps.javascript.ScriptExecutionFailed | 500 | জাভাস্ক্রিপ্ট নীতি বিভিন্ন ধরনের ScriptExecutionFailed ত্রুটি নিক্ষেপ করতে পারে। সাধারণত দেখা যায় এমন ত্রুটিগুলির মধ্যে রয়েছে RangeError , ReferenceError , SyntaxError , TypeError , এবং URIError ৷ | build |
steps.javascript.ScriptExecutionFailedLineNumber | 500 | জাভাস্ক্রিপ্ট কোডে একটি ত্রুটি ঘটেছে৷ বিস্তারিত জানার জন্য ফল্ট স্ট্রিং দেখুন। | N/A |
steps.javascript.ScriptSecurityError | 500 | JavaScript কার্যকর করার সময় একটি নিরাপত্তা ত্রুটি ঘটেছে। বিস্তারিত জানার জন্য ফল্ট স্ট্রিং দেখুন। | N/A |
স্থাপনার ত্রুটি
আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷
| ত্রুটির নাম | কারণ | ঠিক করুন |
|---|---|---|
InvalidResourceUrlFormat | যদি জাভাস্ক্রিপ্ট নীতির <ResourceURL> বা <IncludeURL> উপাদানের মধ্যে নির্দিষ্ট করা রিসোর্স ইউআরএলের ফর্ম্যাটটি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। | build |
InvalidResourceUrlReference | যদি <ResourceURL> বা <IncludeURL> উপাদানগুলি এমন একটি JavaScript ফাইলকে নির্দেশ করে যা বিদ্যমান নেই, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। উল্লেখিত সোর্স ফাইলটি অবশ্যই API প্রক্সি, এনভায়রনমেন্ট বা প্রতিষ্ঠানের স্তরে বিদ্যমান থাকতে হবে। | build |
WrongResourceType | জাভাস্ক্রিপ্ট নীতির <ResourceURL> বা <IncludeURL> উপাদানগুলি jsc (জাভাস্ক্রিপ্ট ফাইল) ব্যতীত অন্য যেকোন রিসোর্স প্রকারকে উল্লেখ করলে এই ত্রুটিটি স্থাপনের সময় ঘটে। | build |
NoResourceURLOrSource | জাভাস্ক্রিপ্ট নীতির স্থাপনা এই ত্রুটির সাথে ব্যর্থ হতে পারে যদি <ResourceURL> উপাদানটি ঘোষণা না করা হয় বা যদি এই উপাদানটির মধ্যে সংস্থান URL সংজ্ঞায়িত না করা হয়। <ResourceURL> উপাদান একটি বাধ্যতামূলক উপাদান। অথবা, <IncludeURL> উপাদানটি ঘোষণা করা হয়েছে কিন্তু রিসোর্স URL এই উপাদানটির মধ্যে সংজ্ঞায়িত করা হয়নি। <IncludeURL> উপাদানটি ঐচ্ছিক কিন্তু ঘোষিত হলে, সম্পদ URL অবশ্যই <IncludeURL> উপাদানের মধ্যে নির্দিষ্ট করতে হবে। | build |
ফল্ট ভেরিয়েবল
যখন এই নীতি রানটাইমে একটি ত্রুটি ট্রিগার করে তখন এই ভেরিয়েবলগুলি সেট করা হয়৷ আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।
| ভেরিয়েবল | যেখানে | উদাহরণ |
|---|---|---|
fault.name=" fault_name " | fault_name হল ফল্টের নাম, যা উপরে রানটাইম ত্রুটির সারণীতে তালিকাভুক্ত করা হয়েছে। ফল্ট নামটি ফল্ট কোডের শেষ অংশ। | fault.name Matches "ScriptExecutionFailed" |
javascript. policy_name .failed | policy_name হল সেই নীতির ব্যবহারকারী-নির্দিষ্ট নাম যা ত্রুটিটি ফেলেছে। | javascript.JavaScript-1.failed = true |
উদাহরণ ত্রুটি প্রতিক্রিয়া
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Javascript runtime error: "ReferenceError: "status" is not defined. (setresponse.js:6)\"", "detail": { "errorcode": "steps.javascript.ScriptExecutionFailed" } } }
উদাহরণ দোষ নিয়ম
<FaultRule name="JavaScript Policy Faults"> <Step> <Name>AM-CustomErrorResponse</Name> <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition> </Step> <Condition>(javascript.JavaScript-1.failed = true) </Condition> </FaultRule>
স্কিমা
প্রতিটি পলিসি টাইপ একটি XML স্কিমা ( .xsd ) দ্বারা সংজ্ঞায়িত করা হয়। তথ্যের জন্য, পলিসি স্কিমাগুলো গিটহাবে পাওয়া যাবে।
সম্পর্কিত বিষয়
- জাভাস্ক্রিপ্ট অবজেক্ট মডেল
- নির্দেশাবলী, পলিসি নমুনা এবং জাভাস্ক্রিপ্ট নমুনার জন্য, "Programming API proxies with JavaScript" দেখুন।
অ্যাপিজি কমিউনিটির নিবন্ধগুলি
আপনি Apigee কমিউনিটিতে এই সম্পর্কিত নিবন্ধগুলি খুঁজে পেতে পারেন: