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

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

কি

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

সম্পর্কে

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

জাভাস্ক্রিপ্ট নীতির জন্য আমরা লগিং ব্যবহার করার পরামর্শ দিই না। মেসেজ লগিং নীতিটি স্প্লঙ্ক, সুমো এবং লগলির মতো তৃতীয় পক্ষের লগিং প্ল্যাটফর্মগুলিতে লগিংয়ের জন্য অনেক বেশি উপযুক্ত এবং আপনি পোস্টক্লায়েন্টফ্লোতে মেসেজ লগিং নীতি কার্যকর করে API প্রক্সি কর্মক্ষমতা উন্নত করতে পারেন, যা ক্লায়েন্টের কাছে প্রতিক্রিয়া পাঠানোর পরে কার্যকর হয়।

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

জাভাস্ক্রিপ্ট সোর্স ফাইলগুলিতে সর্বদা একটি .js এক্সটেনশন থাকা আবশ্যক।

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

ভিডিও

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

নমুনা

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

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

  1. এজ UI তে, প্রক্সি এডিটরে আপনার তৈরি করা প্রক্সিটি খুলুন।
  2. ডেভেলপ ট্যাবটি নির্বাচন করুন।
  3. নতুন মেনু থেকে, নতুন স্ক্রিপ্ট নির্বাচন করুন।
  4. ডায়ালগে, জাভাস্ক্রিপ্ট নির্বাচন করুন এবং স্ক্রিপ্টটির একটি নাম দিন, যেমন js-example
  5. কোড এডিটরে নিম্নলিখিত কোডটি পেস্ট করুন এবং প্রক্সিটি সংরক্ষণ করুন। লক্ষ্য করার জন্য গুরুত্বপূর্ণ বিষয় হল context অবজেক্ট। এই অবজেক্টটি প্রক্সি ফ্লো-এর যেকোনো জাভাস্ক্রিপ্ট কোডে উপলব্ধ। এটি ফ্লো-স্পেসিফিক ধ্রুবক পেতে, দরকারী get/set পদ্ধতি কল করতে এবং আরও ক্রিয়াকলাপের জন্য ব্যবহৃত হয়। এই অবজেক্ট অংশটি Edge-এর JavaScript অবজেক্ট মডেলের । আরও মনে রাখবেন, target.url flow ভেরিয়েবলটি একটি বিল্ট-ইন, রিড/রাইট ভেরিয়েবল যা Target Request ফ্লোতে অ্যাক্সেসযোগ্য। যখন আমরা 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. নতুন নীতি মেনু থেকে, জাভাস্ক্রিপ্ট নির্বাচন করুন।
  7. নীতিমালার একটি নাম দিন, যেমন target-rewrite । ডিফল্ট মান গ্রহণ করুন এবং নীতিমালা সংরক্ষণ করুন।
  8. যদি আপনি ন্যাভিগেটরে প্রক্সি এন্ডপয়েন্ট প্রিফ্লো নির্বাচন করেন, তাহলে আপনি দেখতে পাবেন যে নীতিটি সেই প্রবাহে যোগ করা হয়েছে।
  9. ন্যাভিগেটরে, টার্গেট এন্ডপয়েন্ট প্রিফ্লো আইকনটি নির্বাচন করুন।
  10. ন্যাভিগেটর থেকে, জাভাস্ক্রিপ্ট নীতিটি ফ্লো এডিটরে টার্গেট এন্ডপয়েন্টের অনুরোধের দিকে টেনে আনুন।
  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 । যদি আপনার জাভাস্ক্রিপ্ট কোডের জন্য includes প্রয়োজন হয়, তাহলে আপনি এটি করার জন্য এক বা একাধিক <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> এলিমেন্টের মান (ওপেনিং এবং ক্লোজিং ট্যাগের মধ্যে মান) হল আক্ষরিক মান যা জাভাস্ক্রিপ্ট গ্রহণ করবে।

জাভাস্ক্রিপ্টে, আপনি পলিসি প্রোপার্টি ভ্যালুটি 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> বৈশিষ্ট্য

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

নিম্নলিখিত বৈশিষ্ট্যগুলি এই নীতির সাথে নির্দিষ্ট।

বৈশিষ্ট্য বিবরণ ডিফল্ট উপস্থিতি
সময়সীমা

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

দ্রষ্টব্য: বিনামূল্যে ট্রায়াল অ্যাকাউন্টের জন্য, কার্যকর করার সময় 200 মিলিসেকেন্ডের মধ্যে সীমাবদ্ধ।

নিষিদ্ধ প্রয়োজনীয়

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

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
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>
ডিফল্ট: কোনটিই নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: স্ট্রিং

উদাহরণ

নমুনা বিভাগে মৌলিক উদাহরণটি দেখুন।

<প্রোপার্টি> উপাদান

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

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

গুণাবলী

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

সম্পত্তির নাম উল্লেখ করে।

নিষিদ্ধ প্রয়োজন।

উদাহরণ

নমুনা বিভাগে উদাহরণটি দেখুন।

<ResourceURL> উপাদান

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

<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 কনফিগার করা দেখুন।

ব্যবহারবিধি

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

জাভাস্ক্রিপ্ট নীতি কোড ডিবাগ করা হচ্ছে

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

ট্রেসে মুদ্রিত বিবৃতি দেখতে:

  1. ট্রেস টুলটি খুলুন এবং আপনার জাভাস্ক্রিপ্ট নীতি ধারণকারী একটি প্রক্সির জন্য একটি ট্রেস সেশন শুরু করুন।
  2. প্রক্সিকে ফোন করুন।
  3. ট্রেস টুলে, আউটপুট প্যানেল খুলতে Output from all Transactions-এ ক্লিক করুন।

  4. আপনার মুদ্রিত বিবৃতি এই প্যানেলে প্রদর্শিত হবে।

আপনি ট্রেস টুলে ডিবাগ তথ্য আউটপুট করার জন্য 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
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 কমিউনিটিতে এই সম্পর্কিত নিবন্ধগুলি খুঁজে পেতে পারেন: