জাভাস্ক্রিপ্ট নীতি

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

কী

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

সম্পর্কে

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

JavaScript নীতির জন্য আমরা যে একটি ব্যবহারের ক্ষেত্রে সাজেস্ট করি না তা হল লগিং। মেসেজ লগিং নীতি অনেক বেশি Splunk, Sumo ও Loggly-এর মতো থার্ড-পার্টি লগিং প্ল্যাটফর্মে লগ করার জন্য উপযুক্ত এবং আপনি PostClientFlow-তে মেসেজ লগিং নীতি প্রয়োগ করে API প্রক্সি পারফর্ম্যান্স উন্নত করেন, যা ক্লায়েন্টকে উত্তর পাঠানোর পরে প্রয়োগ করা হয়।

JavaScript নীতি আপনাকে এক্সিকিউট করার জন্য JavaScript সোর্স ফাইল নির্দিষ্ট করতে দেয় অথবা আপনি <Source> এলিমেন্টের মাধ্যমে সরাসরি নীতির কনফিগারেশনে JavaScript কোড যোগ করতে পারেন। যাই হোক, যে ধাপে নীতি অ্যাটাচ করা আছে সেটি এক্সিকিউট করলেই জাভাস্ক্রিপ্ট কোড এক্সিকিউট হয়। সোর্স ফাইল বিকল্পের জন্য, সোর্স কোড সবসময় প্রক্সি বান্ডেলের মধ্যে স্ট্যান্ডার্ড লোকেশনে স্টোর করা হয়: apiproxy/resources/jsc। অথবা, আপনি এনভায়রনমেন্ট বা প্রতিষ্ঠানের লেভেলে রিসোর্স ফাইলে সোর্স কোড স্টোর করতে পারেন। নির্দেশাবলীর জন্য, রিসোর্স ফাইল দেখুন। এছাড়াও, আপনি Apigee UI প্রক্সি এডিটরের মাধ্যমে JavaScript আপলোড করতে পারবেন।

জাভাস্ক্রিপ্ট সোর্স ফাইলের এক্সটেনশন সবসময় .js হতে হবে।

বর্তমানে কাজ করে এমন জাভাস্ক্রিপ্ট ভার্সনের জন্য কাজ করে এমন সফ্টওয়্যার ও কাজ করে এমন ভার্সন দেখুন।

ভিডিও

JavaScript নীতি ব্যবহার করে কীভাবে কাস্টম নীতি এক্সটেনশন তৈরি করতে হয় তা জানতে একটি ছোট ভিডিও দেখুন।

নমুনা

টার্গেট URL আবার লেখা

এখানে একটি সাধারণ ব্যবহারের উদাহরণ দেওয়া হল: অনুরোধের বডি থেকে ডেটা এক্সট্র্যাক্ট করা, সেটি ফ্লো ভেরিয়েবলে স্টোর করা এবং প্রক্সি ফ্লোয়ের অন্য কোথাও সেই ফ্লো ভেরিয়েবল ব্যবহার করা। ধরা যাক, আপনার একটি অ্যাপ আছে যেখানে ব্যবহারকারী HTML ফর্মে তার নাম লিখে জমা দেন। আপনি চান যে API প্রক্সি ফর্ম ডেটা এক্সট্র্যাক্ট করুক এবং ব্যাকএন্ড পরিষেবা কল করার জন্য ব্যবহৃত URL-এ ডায়নামিক পদ্ধতিতে যোগ করুক। আপনি কীভাবে JavaScript নীতিতে এটি করবেন?

মনে রাখবেন: আপনি যদি এই উদাহরণটি ব্যবহার করে দেখতে চান, তাহলে আমরা ধরে নিই যে আপনি প্রক্সি এডিটরে একটি নতুন প্রক্সি তৈরি করেছেন। এটি তৈরি করার সময়, শুধু এর ব্যাকএন্ড সার্ভিস URL হিসেবে: http://www.example.com দিন। এই উদাহরণের জন্য, আমরা ব্যাকএন্ড URL ডাইনামিক পদ্ধতিতে আবার লিখব। নতুন প্রক্সি কীভাবে তৈরি করতে হয় তা না জানলে, 'শুরু করা' টিউটোরিয়াল দেখুন। ।

  1. Edge UI-তে, প্রক্সি এডিটরে আপনার তৈরি করা প্রক্সি খুলুন।
  2. ডেভেলপ করুন ট্যাব বেছে নিন।
  3. 'নতুন' মেনু থেকে, নতুন স্ক্রিপ্ট বিকল্প বেছে নিন।
  4. ডায়ালগে, JavaScript বেছে নিন এবং স্ক্রিপ্টের একটি নাম দিন, যেমন js-example।
  5. কোড এডিটরে নিম্নলিখিত কোড পেস্ট করুন এবং প্রক্সি সেভ করুন। গুরুত্বপূর্ণ বিষয় হল, context অবজেক্টের দিকে নজর রাখা। এই অবজেক্টটি JavaScript কোডের জন্য উপলভ্য প্রক্সি ফ্লোয়ের যেকোনও জায়গায়। ফ্লো-নির্দিষ্ট ধ্রুবক পেতে, কার্যকর get/set পদ্ধতি কল করতে এবং আরও অপারেশনের জন্য এটি ব্যবহার করা হয়। এই অবজেক্ট পার্টটি Edge-এর জাভাস্ক্রিপ্ট অবজেক্ট মডেল। এছাড়াও, মনে রাখবেন যে target.url ফ্লো ভেরিয়েবল হল একটি বিল্ট-ইন, রিড/রাইট ভেরিয়েবল যা টার্গেট রিকোয়েস্ট ফ্লোতে অ্যাক্সেস করা যায়। API URL-এর সাথে আমরা সেই ভেরিয়েবল সেট করলে, Edge সেই URL-এ ব্যাকএন্ড কল করে। আমরা মূলত আসল টার্গেট 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);
    }
  6. 'নতুন নীতি' মেনু থেকে, JavaScript বিকল্প বেছে নিন।
  7. নীতিটির একটি নাম দিন, যেমন target-rewrite। ডিফল্ট মান গ্রহণ করুন এবং নীতিটি সেভ করুন।
  8. আপনি নেভিগেটরে প্রক্সি এন্ডপয়েন্ট প্রিফ্লো বেছে নিলে, আপনি দেখতে পাবেন যে সেই ফ্লোতে নীতি যোগ করা হয়েছে।
  9. নেভিগেটরে, টার্গেট এন্ডপয়েন্ট প্রিফ্লো আইকন বেছে নিন।
  10. ফ্লো এডিটরে নেভিগেটর থেকে, JavaScript নীতিটি টেনে এনে Target এন্ডপয়েন্টের অনুরোধের দিকে রাখুন।
  11. সেভ করুন।
  12. এইভাবে API কল করুন, আপনার সঠিক সংস্থার নাম ও প্রক্সি নাম উপযুক্ত হিসেবে পরিবর্তন করুন:
curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST -d 'user=Will' http://myorg-test.apigee.net/js-example

শেষ একটি বিষয়, এই উদাহরণে ব্যবহৃত জাভাস্ক্রিপ্ট নীতির XML সংজ্ঞাটি একবার দেখে নেওয়া যাক। মনে রাখার মতো গুরুত্বপূর্ণ বিষয় হল, <ResourceURL> এলিমেন্টটি এক্সিকিউট করার জন্য জাভাস্ক্রিপ্ট সোর্স ফাইল নির্দিষ্ট করতে ব্যবহার করা হয়। এই একই প্যাটার্ন যেকোনও জাভাস্ক্রিপ্ট সোর্স ফাইলের জন্য ব্যবহার করা হয়: jsc://filename.js। আপনার JavaScript কোডে ইনক্লুড করার প্রয়োজন হলে, আপনি এক বা একাধিক <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>

JavaScript থেকে প্রপার্টির ভ্যালু রিট্রিভ করা

আপনি কনফিগারেশনে <Property> এলিমেন্ট যোগ করতে পারেন, তারপরে রানটাইমে JavaScript-এর মাধ্যমে এলিমেন্টের ভ্যালু রিট্রিভ করতে পারেন।

JavaScript কোড থেকে প্রপার্টি অ্যাক্সেস করার জন্য এলিমেন্টের name অ্যাট্রিবিউট ব্যবহার করে নাম নির্দিষ্ট করুন। <Property> এলিমেন্টের ভ্যালু (ওপেনিং ও ক্লোজিং ট্যাগের মাঝের ভ্যালু) হল লিটারাল ভ্যালু যা জাভাস্ক্রিপ্ট পাবে।

JavaScript-এ, আপনি নিম্নলিখিত উপায়ে 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);

সমস্যা ম্যানেজ করা

JavaScript কলআউটে ব্যবহার করা যায় এমন সমস্যা সমাধানকারী টেকনিকের উদাহরণ ও আলোচনা পেতে, 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> অ্যাট্রিবিউট

<Javascript name="Javascript-1" enabled="true" continueOnError="false" async="false" timeLimit="200">

এই নীতির জন্য নিম্নলিখিত অ্যাট্রিবিউট নির্দিষ্ট করা আছে।

অ্যাট্রিবিউট বিবরণ ডিফল্ট উপস্থিতি
timeLimit

স্ক্রিপ্টটি এক্সিকিউট করার জন্য অনুমোদিত সর্বাধিক সময় (মিলি সেকেন্ডে) নির্দিষ্ট করে। যেমন, ২০০ মিলিসেকেন্ডের সীমা অতিক্রম করলে, নীতি এই সমস্যাটি দেখায়: Javascript.policy_name failed with error: Javascript runtime exceeded limit of 200ms.

মনে রাখবেন: ফ্রি ট্রায়াল অ্যাকাউন্টের ক্ষেত্রে, এক্সিকিউশন টাইম ২০০ মিলি সেকেন্ডের মধ্যে সীমাবদ্ধ।

প্রযোজ্য নয় প্রয়োজনীয়

নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
name

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<IncludeURL> এলিমেন্ট

<ResourceURL> বা <Source> এলিমেন্টের সাথে নির্দিষ্ট করা মূল জাভাস্ক্রিপ্ট ফাইলের ডিপেন্ডেন্সি হিসেবে লোড করার জন্য একটি জাভাস্ক্রিপ্ট লাইব্রেরি ফাইল নির্দিষ্ট করে। নীতিতে যেভাবে তালিকাভুক্ত করা হয়েছে সেই ক্রম অনুযায়ী স্ক্রিপ্ট মূল্যায়ন করা হবে। আপনার কোড জাভাস্ক্রিপ্ট অবজেক্ট মডেলের অবজেক্ট, মেথড ও প্রপার্টি ব্যবহার করতে পারে।

অতিরিক্ত <IncludeURL> এলিমেন্ট সহ একাধিক জাভাস্ক্রিপ্ট নির্ভরতা রিসোর্স অন্তর্ভুক্ত করুন।

<IncludeURL>jsc://my-javascript-dependency.js</IncludeURL>
ডিফল্ট: কোনওটিই নয়
উপস্থিতি: ঐচ্ছিক
টাইপ: স্ট্রিং

উদাহরণ

Samples বিভাগে প্রাথমিক উদাহরণ দেখুন।

<Property> এলিমেন্ট

রানটাইমে জাভাস্ক্রিপ্ট কোড থেকে অ্যাক্সেস করতে পারবেন এমন একটি প্রপার্টি নির্দিষ্ট করে।

<Properties>
    <Property name="propName">propertyValue</Property>
</Properties>
ডিফল্ট: কোনওটিই নয়
উপস্থিতি: ঐচ্ছিক
টাইপ: স্ট্রিং

অ্যাট্রিবিউট

অ্যাট্রিবিউট বিবরণ ডিফল্ট উপস্থিতি
নাম

প্রপার্টির নাম নির্দিষ্ট করে।

প্রযোজ্য নয় প্রয়োজনীয়।

উদাহরণ

স্যাম্পেল বিভাগে উদাহরণ দেখুন।

<ResourceURL> এলিমেন্ট

API ফ্লোতে এক্সিকিউট করা হবে এমন মূল JavaScript ফাইল নির্দিষ্ট করে। আপনি এই ফাইলটি API প্রক্সি স্কোপে (API প্রক্সি বান্ডেলের মধ্যে /apiproxy/resources/jsc-এর অধীনে বা API প্রক্সি এডিটরের নেভিগেটর প্যানেলের স্ক্রিপ্ট বিভাগে) অথবা একাধিক API প্রক্সি জুড়ে আবার ব্যবহার করার জন্য সংস্থা বা এনভায়রনমেন্ট স্কোপে স্টোর করতে পারেন, যেমন রিসোর্স ফাইল নিবন্ধে বর্ণনা করা হয়েছে। আপনার কোড জাভাস্ক্রিপ্ট অবজেক্ট মডেলের অবজেক্ট, মেথড ও প্রপার্টি ব্যবহার করতে পারে।

<ResourceURL>jsc://my-javascript.js</ResourceURL>
ডিফল্ট: কোনওটিই নয়
উপস্থিতি: <ResourceURL> বা <Source>-এর মধ্যে একটি প্রয়োজন। যদি <ResourceURL> ও <Source> দুটিই থাকে, তাহলে <ResourceURL> উপেক্ষা করা হয়।
টাইপ: স্ট্রিং

উদাহরণ

Samples বিভাগে প্রাথমিক উদাহরণ দেখুন।

<Source> এলিমেন্ট

আপনাকে সরাসরি নীতির XML কনফিগারেশনে জাভাস্ক্রিপ্ট যোগ করতে দেয়। API ফ্লোতে নীতি এক্সিকিউট হলে, যোগ করা JavaScript কোড এক্সিকিউট হয়।

ডিফল্ট: কোনওটিই নয়
উপস্থিতি: <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> এলিমেন্ট

JavaScript নীতির মাধ্যমে তৈরি করা সব 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 কনফিগার করা দেখুন।

ব্যবহার সংক্রান্ত নোট

জাভাস্ক্রিপ্ট নীতিতে কোনও আসল কোড থাকে না। এর পরিবর্তে, JavaScript নীতিতে একটি JavaScript 'রিসোর্স' রেফারেন্স করা হয় এবং API ফ্লোতে সেই ধাপটি সংজ্ঞায়িত করা হয় যেখানে JavaScript এক্সিকিউট হয়। আপনি ম্যানেজমেন্ট UI প্রক্সি এডিটরের মাধ্যমে আপনার স্ক্রিপ্ট আপলোড করতে পারেন অথবা আপনি এটি API প্রক্সির /resources/jsc ডিরেক্টরিতে অন্তর্ভুক্ত করতে পারেন যা আপনি লোকালি ডেভেলপ করেন।

JavaScript নীতি কোড ডিবাগ করা

Trace Tool-এর ট্রানজ্যাকশন আউটপুট প্যানেলে ডিবাগ সংক্রান্ত তথ্য আউটপুট করতে print() ফাংশন ব্যবহার করুন। বিস্তারিত তথ্য ও উদাহরণের জন্য, জাভাস্ক্রিপ্ট print() স্টেটমেন্টের মাধ্যমে ডিবাগ করা দেখুন।

Trace-এ প্রিন্ট স্টেটমেন্ট দেখতে:

  1. ট্রেস টুল খুলুন এবং এমন প্রক্সির জন্য ট্রেস সেশন শুরু করুন যাতে আপনার JavaScript নীতি আছে।
  2. প্রক্সি সার্ভারে কল করুন।
  3. ট্রেস টুলে, আউটপুট প্যানেল খুলতে সব ট্রানজ্যাকশন থেকে আউটপুট বিকল্পে ক্লিক করুন।

  4. এই প্যানেলে আপনার প্রিন্ট স্টেটমেন্ট দেখা যাবে।

Trace টুল-এ ডিবাগ সংক্রান্ত তথ্য আউটপুট করতে আপনি print() ফাংশন ব্যবহার করতে পারেন। এই ফাংশনটি জাভাস্ক্রিপ্ট অবজেক্ট মডেলের মাধ্যমে সরাসরি উপলভ্য। বিস্তারিত জানতে, "print() স্টেটমেন্টের মাধ্যমে জাভাস্ক্রিপ্ট ডিবাগ করা" দেখুন।

ফ্লো ভেরিয়েবল

এই নীতি ডিফল্ট হিসেবে কোনও ভেরিয়েবল পূরণ করে না; তবে, আপনি কনটেক্সট অবজেক্টে মেথড কল করে আপনার JavaScript কোডে ফ্লো ভেরিয়েবল সেট (ও পেতে) পারবেন। একটি সাধারণ প্যাটার্ন এইরকম দেখতে হয়:

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"))

Apigee Edge জাভাস্ক্রিপ্ট অবজেক্ট মডেল-এর অংশ হল কনটেক্সট অবজেক্ট।

সমস্যার রেফারেন্স

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

রানটাইম ত্রুটি

নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷

ফল্ট কোড HTTP স্থিতি কারণ ঠিক করুন
steps.javascript.ScriptExecutionFailed 500 জাভাস্ক্রিপ্ট নীতি বিভিন্ন ধরনের ScriptExecutionFailed ত্রুটি নিক্ষেপ করতে পারে। সাধারণত দেখা যায় এমন ত্রুটিগুলির মধ্যে রয়েছে RangeError , ReferenceError , SyntaxError , TypeError , এবং URIError ৷
steps.javascript.ScriptExecutionFailedLineNumber 500 জাভাস্ক্রিপ্ট কোডে একটি ত্রুটি ঘটেছে৷ বিস্তারিত জানার জন্য ফল্ট স্ট্রিং দেখুন। N/A
steps.javascript.ScriptSecurityError 500 JavaScript কার্যকর করার সময় একটি নিরাপত্তা ত্রুটি ঘটেছে। বিস্তারিত জানার জন্য ফল্ট স্ট্রিং দেখুন। N/A

স্থাপনার ত্রুটি

আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷

ত্রুটির নাম কারণ ঠিক করুন
InvalidResourceUrlFormat যদি জাভাস্ক্রিপ্ট নীতির <ResourceURL> বা <IncludeURL> উপাদানের মধ্যে নির্দিষ্ট করা রিসোর্স ইউআরএলের ফর্ম্যাটটি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
InvalidResourceUrlReference যদি <ResourceURL> বা <IncludeURL> উপাদানগুলি এমন একটি JavaScript ফাইলকে নির্দেশ করে যা বিদ্যমান নেই, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। উল্লেখিত সোর্স ফাইলটি অবশ্যই API প্রক্সি, এনভায়রনমেন্ট বা প্রতিষ্ঠানের স্তরে বিদ্যমান থাকতে হবে।
WrongResourceType জাভাস্ক্রিপ্ট নীতির <ResourceURL> বা <IncludeURL> উপাদানগুলি jsc (জাভাস্ক্রিপ্ট ফাইল) ব্যতীত অন্য যেকোন রিসোর্স প্রকারকে উল্লেখ করলে এই ত্রুটিটি স্থাপনের সময় ঘটে।
NoResourceURLOrSource জাভাস্ক্রিপ্ট নীতির স্থাপনা এই ত্রুটির সাথে ব্যর্থ হতে পারে যদি <ResourceURL> উপাদানটি ঘোষণা না করা হয় বা যদি এই উপাদানটির মধ্যে সংস্থান URL সংজ্ঞায়িত না করা হয়। <ResourceURL> উপাদান একটি বাধ্যতামূলক উপাদান। অথবা, <IncludeURL> উপাদানটি ঘোষণা করা হয়েছে কিন্তু রিসোর্স URL এই উপাদানটির মধ্যে সংজ্ঞায়িত করা হয়নি। <IncludeURL> উপাদানটি ঐচ্ছিক কিন্তু ঘোষিত হলে, সম্পদ URL অবশ্যই <IncludeURL> উপাদানের মধ্যে নির্দিষ্ট করতে হবে।

ফল্ট ভেরিয়েবল

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

ভেরিয়েবল যেখানে উদাহরণ
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) দ্বারা সংজ্ঞায়িত করা হয়। রেফারেন্সের জন্য, নীতি স্কিমা GitHub-এ উপলভ্য।

সম্পর্কিত বিষয়

Apigee কমিউনিটি নিবন্ধ

আপনি Apigee কমিউনিটিতে এইসব সম্পর্কিত নিবন্ধ খুঁজে পেতে পারেন: