জাভাস্ক্রিপ্ট অবজেক্ট মডেল

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

এই বিষয়টি Apigee Edge JavaScript অবজেক্ট মডেল নিয়ে আলোচনা করে। আপনি যদি একটি API প্রক্সিতে কাস্টম জাভাস্ক্রিপ্ট যোগ করতে JavaScript নীতি ব্যবহার করতে চান তাহলে এই মডেলটি বোঝা গুরুত্বপূর্ণ।

এজ জাভাস্ক্রিপ্ট অবজেক্ট মডেল সম্পর্কে

Apigee Edge JavaScript অবজেক্ট মডেল সংশ্লিষ্ট বৈশিষ্ট্যগুলির সাথে বস্তুগুলিকে সংজ্ঞায়িত করে যা একটি Apigee Edge প্রক্সি প্রবাহের মধ্যে কার্যকর করা JavaScript কোডের জন্য উপলব্ধ। আপনি একটি API প্রক্সি ফ্লোতে এই কাস্টম কোড সংযুক্ত করতে JavaScript নীতি ব্যবহার করেন৷

এই মডেল দ্বারা সংজ্ঞায়িত বস্তুর API প্রক্সি প্রবাহের মধ্যে সুযোগ রয়েছে, যার মানে নির্দিষ্ট বস্তু এবং বৈশিষ্ট্য শুধুমাত্র প্রবাহের নির্দিষ্ট পয়েন্টে উপলব্ধ। যখন আপনার জাভাস্ক্রিপ্ট কার্যকর করা হয়, তখন এক্সিকিউশনের জন্য একটি সুযোগ তৈরি করা হয়। সেই সুযোগে, এই বস্তুর রেফারেন্স তৈরি করা হয়:

  • প্রসঙ্গ : একটি বস্তু যা বার্তা প্রসঙ্গে অ্যাক্সেস প্রদান করে
  • অনুরোধ : একটি শর্টহ্যান্ড যা অনুরোধ বস্তুতে অ্যাক্সেসের অনুমতি দেয়
  • প্রতিক্রিয়া : একটি শর্টহ্যান্ড যা অনুরোধ বস্তুতে অ্যাক্সেসের অনুমতি দেয়
  • crypto : বিভিন্ন হ্যাশ ফাংশন প্রদান করে
  • প্রিন্ট : আউটপুট নির্গত করার জন্য একটি ফাংশন
  • বৈশিষ্ট্য : নীতিতে কনফিগারেশন বৈশিষ্ট্য পড়ার অ্যাক্সেসের অনুমতি দেয়

প্রসঙ্গ বস্তু

context বস্তুর বিশ্বব্যাপী সুযোগ রয়েছে। এটি API প্রক্সি প্রবাহের মধ্যে সর্বত্র উপলব্ধ। এতে চারটি চাইল্ড অবজেক্ট রয়েছে: proxyRequest , proxyResponse , targetRequest , targetResponse । এই শিশু অবজেক্টগুলি পরিবেষ্টিত অনুরোধ এবং প্রতিক্রিয়া, হয় প্রক্সি অনুরোধ এবং প্রতিক্রিয়া বা লক্ষ্য অনুরোধ এবং প্রতিক্রিয়ার জন্য বিস্তৃত। উদাহরণস্বরূপ, যদি JavaScript নীতি প্রবাহের প্রক্সি এন্ডপয়েন্ট অংশে সঞ্চালিত হয়, তাহলে context.proxyRequest এবং context.proxyResponse অবজেক্টের সুযোগ রয়েছে। যদি জাভাস্ক্রিপ্ট একটি টার্গেট ফ্লোতে চলে, তাহলে context.targetRequest এবং context.targetResponse অবজেক্টের সুযোগ রয়েছে।

context বস্তুর বৈশিষ্ট্য এবং পদ্ধতিও রয়েছে, যা এই বিষয়ে বিস্তারিতভাবে বর্ণনা করা হয়েছে। উদাহরণস্বরূপ, নিম্নলিখিত জাভাস্ক্রিপ্ট কোড উদাহরণটি context.flow প্রপার্টি ব্যবহার করে এবং contextget/setVariable() পদ্ধতিগুলিকে কল করে।

if (context.flow=="PROXY_REQ_FLOW") {
     var username = context.getVariable("request.formparam.user");
     context.setVariable("USER.name", username);
}

এই পদ্ধতিগুলি প্রবাহ ভেরিয়েবলের সাথে সরাসরি যোগাযোগ করে। context.flow প্রপার্টির মান হল বর্তমান প্রবাহের সুযোগ। প্রক্সি অনুরোধের প্রবাহে, এটি স্থির PROXY_REQ_FLOW এ সেট করা হয়েছে। লক্ষ্য প্রতিক্রিয়া প্রবাহে থাকলে, এটি TARGET_RESP_FLOW এ সেট করা হয়েছে। এই ধ্রুবকটি সুযোগ-নির্দিষ্ট কোড কার্যকর করার জন্য কার্যকর। গেটার আপনাকে ফ্লো ভেরিয়েবল পেতে দেয় এবং সেটার আপনাকে ফ্লো ভেরিয়েবল সেট করতে দেয়। এই ভেরিয়েবলগুলি সাধারণত প্রক্সি ফ্লোতে পাওয়া যায় এবং অন্যান্য পলিসি দ্বারা ব্যবহার করা যেতে পারে।

আরও বিশদ বিবরণ এবং উদাহরণের জন্য নীচের প্রসঙ্গ অবজেক্ট রেফারেন্স দেখুন।

ক্রিপ্টো অবজেক্ট

ক্রিপ্টো অবজেক্ট জাভাস্ক্রিপ্ট অবজেক্ট মডেলে মৌলিক, উচ্চ কর্মক্ষমতা ক্রিপ্টোগ্রাফিক সমর্থন যোগ করে। আরও বিশদ এবং উদাহরণের জন্য নীচে ক্রিপ্টো অবজেক্ট রেফারেন্স দেখুন।

অনুরোধ এবং প্রতিক্রিয়া বস্তু

request এবং response বস্তুগুলি পরিবেষ্টিত অনুরোধ এবং প্রতিক্রিয়ার সংক্ষিপ্ত রেফারেন্স, হয় প্রক্সি অনুরোধ এবং প্রতিক্রিয়া বা লক্ষ্য অনুরোধ এবং প্রতিক্রিয়া। এই ভেরিয়েবলগুলি যে বস্তুগুলিকে নির্দেশ করে তা নির্ভর করে জাভাস্ক্রিপ্ট নীতি যে প্রেক্ষাপটে কার্যকর করে তার উপর। যদি জাভাস্ক্রিপ্ট একটি প্রক্সি এন্ডপয়েন্টের প্রবাহে চলে, তাহলে অনুরোধ এবং প্রতিক্রিয়া ভেরিয়েবলগুলি context.proxyRequest এবং context.proxyResponse উল্লেখ করে। যদি জাভাস্ক্রিপ্ট একটি টার্গেট ফ্লোতে চলে, তাহলে ভেরিয়েবলগুলি context.targetRequest এবং context.targetResponse উল্লেখ করে।

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

বৈশিষ্ট্য বস্তু

ব্যবহার করার সময় a নীতি কনফিগারেশনের উপাদান, জাভাস্ক্রিপ্ট কোড properties পরিবর্তনশীল ব্যবহার করে সেই বৈশিষ্ট্যগুলির মানগুলি অ্যাক্সেস করতে পারে।

উদাহরণস্বরূপ, যদি আপনার জাভাস্ক্রিপ্ট কনফিগারেশনে থাকে:

<Javascript name='JS-1' >
  <Properties>
    <Property name="number">8675309</Property>
    <Property name="firstname">Jenny</Property>
  </Properties>
  <ResourceURL>jsc://my-code.js</ResourceURL>
</Javascript>

তারপর my-code.js এ, আপনি করতে পারেন:

  print(properties.firstname);  // prints Jenny
  print(properties.number);  // 8675309

আরও কার্যত, কনফিগারেশন কোডটিকে ভিন্ন পরিবেশে, বিভিন্ন মুহুর্তে বা যেকোনো কারণে চালানোর সময় ভিন্নভাবে আচরণ করার অনুমতি দিতে পারে।

উদাহরণস্বরূপ, নিম্নলিখিত "ভেরিয়েবলের নাম" এবং আউটপুটের শৈলী নির্দিষ্ট করে যা জাভাস্ক্রিপ্টের তথ্য নির্গত করা উচিত:

<Javascript name='JS-2' >
  <Properties>
    <Property name="output">my_output_variable</Property>
    <Property name="prettyPrint">true</Property>
  </Properties>
  <ResourceURL>jsc://emit-results.js</ResourceURL>
</Javascript>
তারপর emit-results.js এ, কোডটি এটি করতে পারে:
var result = { prop1: "something", prop2 : "something else" } ;
if (properties.prettyPrint == "true") {
  context.setVariable(properties.output, JSON.stringify(result, null, 2));
}
else {
  context.setVariable(properties.output, JSON.stringify(result));
}

ক্রিপ্টো অবজেক্ট রেফারেন্স

ক্রিপ্টো অবজেক্ট আপনাকে জাভাস্ক্রিপ্টে মৌলিক ক্রিপ্টোগ্রাফিক হ্যাশিং ফাংশন সম্পাদন করতে দেয়।

ক্রিপ্টো অবজেক্টের বিশ্বব্যাপী সুযোগ রয়েছে। এটি API প্রক্সি প্রবাহের মধ্যে সর্বত্র উপলব্ধ। ক্রিপ্টো আপনাকে এই হ্যাশ বস্তুগুলির সাথে কাজ করতে দেয়:

  • SHA-1
  • SHA256
  • SHA512
  • MD5

SHA-1 অবজেক্টের সাথে কাজ করা

আপনি SHA-1 অবজেক্ট তৈরি করতে পারেন, সেগুলিকে আপডেট করতে পারেন এবং সেগুলিকে হেক্স এবং বেস64 মানগুলিতে রূপান্তর করতে পারেন৷

একটি নতুন SHA-1 অবজেক্ট তৈরি করুন

var _sha1 = crypto.getSHA1();

একটি SHA-1 অবজেক্ট আপডেট করুন

সিনট্যাক্স

_sha1.update(value);

পরামিতি

  • মান - (স্ট্রিং) যেকোনো স্ট্রিং মান।

উদাহরণ

একটি SHA-1 অবজেক্ট আপডেট করুন:

_sha1.update("salt_value");

_sha1.update("some text");

হেক্স স্ট্রিং হিসাবে SHA-1 অবজেক্টটি ফেরত দিন

var _hashed_token = _sha1.digest();

SHA-1 অবজেক্টটিকে একটি base64 স্ট্রিং হিসাবে ফেরত দিন

var _hashed_token = _sha1.digest64();

SHA-256 অবজেক্টের সাথে কাজ করা

আপনি SHA-256 অবজেক্ট তৈরি করতে পারেন, সেগুলিকে আপডেট করতে পারেন এবং সেগুলিকে হেক্স এবং বেস64 মানগুলিতে রূপান্তর করতে পারেন৷

একটি নতুন SHA-256 অবজেক্ট তৈরি করুন

var _sha256 = crypto.getSHA256();

একটি SHA-256 অবজেক্ট আপডেট করুন

সিনট্যাক্স

_sha256.update(value);

পরামিতি

  • মান - (স্ট্রিং) যেকোনো স্ট্রিং মান।

উদাহরণ

একটি SHA-256 অবজেক্ট আপডেট করুন:

_sha256.update("salt_value");

_sha256.update("some text");

হেক্স স্ট্রিং হিসাবে SHA-256 অবজেক্টটি ফেরত দিন

var _hashed_token = _sha256.digest();

SHA-256 অবজেক্টটিকে একটি base64 স্ট্রিং হিসাবে ফেরত দিন

var _hashed_token = _sha256.digest64();

SHA-512 অবজেক্টের সাথে কাজ করা

আপনি SHA-512 অবজেক্ট তৈরি করতে পারেন, সেগুলিকে আপডেট করতে পারেন এবং সেগুলিকে হেক্স এবং বেস64 মানগুলিতে রূপান্তর করতে পারেন৷

একটি নতুন SHA-512 অবজেক্ট তৈরি করুন

var _sha512 = crypto.getSHA512();

একটি SHA-512 অবজেক্ট আপডেট করুন

সিনট্যাক্স

_sha512.update(value);

পরামিতি

  • মান - (স্ট্রিং) যেকোনো স্ট্রিং মান।

উদাহরণ

একটি SHA-512 অবজেক্ট আপডেট করুন:

_sha512.update("salt_value");

_sha512.update("some text");

হেক্স স্ট্রিং হিসাবে SHA-512 অবজেক্টটি ফেরত দিন

var _hashed_token = _sha512.digest();

SHA-512 অবজেক্টটিকে একটি base64 স্ট্রিং হিসাবে ফেরত দিন

var _hashed_token = _sha512.digest64();

MD5 অবজেক্টের সাথে কাজ করা

আপনি MD5 অবজেক্ট তৈরি করতে পারেন, সেগুলিকে আপডেট করতে পারেন এবং সেগুলিকে হেক্স এবং বেস64 মানগুলিতে রূপান্তর করতে পারেন।

একটি নতুন MD5 অবজেক্ট তৈরি করুন

var _md5 = crypto.getMD5();

একটি MD5 অবজেক্ট আপডেট করুন

সিনট্যাক্স

_md5.update(value);

পরামিতি

  • মান - (স্ট্রিং) যেকোনো স্ট্রিং মান।

উদাহরণ

একটি MD5 অবজেক্ট আপডেট করুন:

_md5.update("salt_value");

_md5.update("some text");

MD5 অবজেক্টটিকে হেক্স স্ট্রিং হিসাবে ফেরত দিন

var _hashed_token = _md5.digest();

MD5 অবজেক্টটিকে বেস64 স্ট্রিং হিসাবে ফেরত দিন

var _hashed_token = _md5.digest64();

ক্রিপ্টো তারিখ/সময় সমর্থন

ক্রিপ্টো অবজেক্ট তারিখ/সময় ফর্ম্যাটিং প্যাটার্ন সমর্থন করে।

crypto.dateFormat()

স্ট্রিং বিন্যাসে একটি তারিখ প্রদান করে।

সিনট্যাক্স

crypto.dateFormat(format, [timezone], [time])

পরামিতি

  • বিন্যাস - (স্ট্রিং) এই প্যারামিটারের জন্য অন্তর্নিহিত বাস্তবায়ন হল java.text.SimpleDateFormat । যেমন: 'yyyy-MM-DD HH:mm:ss.SSS'
  • টাইমজোন - (স্ট্রিং, ঐচ্ছিক) এই প্যারামিটারের জন্য অন্তর্নিহিত বাস্তবায়ন হল java.util.TimeZone । এই প্যারামিটারটি একই ডিফল্ট: UTC
  • সময় - (সংখ্যা, ঐচ্ছিক) বিন্যাস করার জন্য একটি ইউনিক্স টাইমস্ট্যাম্প মান। ডিফল্ট: বর্তমান সময়

উদাহরণ

মিলিসেকেন্ডে নেমে বর্তমান সময় পান:

var _now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS');

প্যাসিফিক টাইম জোনের বর্তমান সময় পান:

var _pst = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST');

এখন থেকে দশ সেকেন্ডের মান পান:

var _timeNow = Number(context.getVariable('system.timestamp'));
var ten_seconds = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow + 10 * 1000);

অতিরিক্ত উদাহরণ। এছাড়াও java.text.SimpleDateFormat ডকুমেন্টেশন দেখুন।

var _pst = crypto.dateFormat('M');
var _pst = crypto.dateFormat('EEE, d MMM yyyy HH:mm:ss Z');
var _pst = crypto.dateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

যেকোনো সমর্থিত হ্যাশ বস্তু পেতে getHash() ব্যবহার করুন

উদাহরণ

var _hash1 = crypto.getHash('MD5');

var _hash2 = crypto.getHash('SHA-1');

var _hash3 = crypto.getHash('SHA-256');

var _hash4 = crypto.getHash('SHA-512');

ক্রিপ্টো সহ নমুনা

try {
    // get values to use with hash functions
    var salt = context.getVariable("salt") || 'SomeHardCodedSalt';
    var host = context.getVariable("request.header.Host");
    var unhashed_token = "";

    var _timeNow = Number(context.getVariable('system.timestamp'));
    var now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow);
    unhashed_token = "|" + now + "|" + host

    // generate a hash with the unhashedToken:
    var sha512 = crypto.getSHA512();
    sha512.update(salt);
    sha512.update(unhashed_token);

    // convert to base64
    var base64_token = sha512.digest64();

    // set headers
    context.setVariable("request.header.now", now);
    context.setVariable("request.header.token", base64_token);

} catch(e) {
    throw 'Error in Javascript';
}

প্রসঙ্গ অবজেক্ট রেফারেন্স

একটি API প্রক্সি দ্বারা সম্পাদিত প্রতিটি অনুরোধ/প্রতিক্রিয়া লেনদেনের জন্য একটি context বস্তু তৈরি করা হয়। context বস্তু প্রতিটি লেনদেনের সাথে সম্পর্কিত ভেরিয়েবলগুলি পেতে, সেট করতে এবং অপসারণের পদ্ধতিগুলিকে প্রকাশ করে।

ভেরিয়েবল একটি লেনদেনের জন্য নির্দিষ্ট বৈশিষ্ট্য সংজ্ঞায়িত করে। দিনের সময়, অনুরোধকারী ক্লায়েন্টের লোকেল, অনুরোধকারী ক্লায়েন্টের ব্যবহারকারী-এজেন্ট এবং লক্ষ্য পরিষেবার URL হল context উপলব্ধ ভেরিয়েবলের সমস্ত উদাহরণ। অতএব, context যুক্তি তৈরির জন্য উপযোগী যা কাস্টম আচরণ চালানোর জন্য এই বৈশিষ্ট্যগুলির উপর নির্ভর করে।

ফ্লো ভেরিয়েবল রেফারেন্স এবং এক্সট্র্যাক্ট ভেরিয়েবল নীতি দেখুন।

প্রসঙ্গ বস্তুর সারাংশ

এই টেবিলটি সংক্ষিপ্তভাবে প্রসঙ্গ অবজেক্ট এবং এর বাচ্চাদের বর্ণনা করে এবং প্রত্যেকের সাথে আবদ্ধ বৈশিষ্ট্যগুলি তালিকাভুক্ত করে।

নাম বর্ণনা বৈশিষ্ট্য
context বার্তা প্রক্রিয়াকরণ পাইপলাইন প্রসঙ্গ এবং অনুরোধ এবং প্রতিক্রিয়া প্রবাহের জন্য একটি মোড়ক যা ProxyEndpoint এবং TargetEndpoint দ্বারা কার্যকর করা হয়। প্রবাহ, অধিবেশন
context. proxyRequest একটি বস্তু যা প্রক্সিএন্ডপয়েন্টে অন্তর্মুখী অনুরোধ বার্তাকে প্রতিনিধিত্ব করে (অনুরোধকারী অ্যাপ থেকে API প্রক্সিতে) হেডার, ক্যোয়ারী প্যারামিটার, পদ্ধতি, বডি, ইউআরএল
context. targetRequest একটি বস্তু যা TargetEndpoint থেকে (API প্রক্সি থেকে ব্যাকএন্ড পরিষেবাতে) আউটবাউন্ড অনুরোধ বার্তাকে প্রতিনিধিত্ব করে। হেডার, ক্যোয়ারী প্যারামিটার, পদ্ধতি, বডি, ইউআরএল
context. targetResponse একটি বস্তু যা অন্তর্মুখী লক্ষ্য প্রতিক্রিয়া বার্তাকে প্রতিনিধিত্ব করে (ব্যাকএন্ড পরিষেবা থেকে API প্রক্সিতে) শিরোনাম, বিষয়বস্তু, অবস্থা
context. proxyResponse একটি বস্তু যা আউটবাউন্ড প্রক্সি প্রতিক্রিয়া বার্তা প্রতিনিধিত্ব করে (এপিআই প্রক্সি থেকে অনুরোধকারী অ্যাপে) শিরোনাম, বিষয়বস্তু, অবস্থা
context.flow বর্তমান প্রবাহের নাম। নিচে context.flow দেখুন।
context.session নাম/মান জোড়ার একটি মানচিত্র যা আপনি একই প্রসঙ্গে কার্যকরী দুটি ভিন্ন ধাপের মধ্যে বস্তুগুলিকে পাস করতে ব্যবহার করতে পারেন। যেমন: context.session['key'] = 123 কখন এবং কখন এই বস্তুটি ব্যবহার করবেন না সে সম্পর্কে আরও তথ্যের জন্য, এই Apigee কমিউনিটি আলোচনা দেখুন।

প্রসঙ্গ বস্তু পদ্ধতি

context.getVariable()

একটি পূর্ব-সংজ্ঞায়িত বা কাস্টম ভেরিয়েবলের মান পুনরুদ্ধার করে।

সিনট্যাক্স

context.getVariable("variable-name");

উদাহরণ

বর্তমান বছরের জন্য মান পেতে:

var year = context.getVariable('system.time.year');

context.setVariable()

একটি কাস্টম ভেরিয়েবল বা যেকোনো লিখনযোগ্য পূর্ব-সংজ্ঞায়িত ভেরিয়েবলের জন্য মান সেট করে।

সিনট্যাক্স

context.setVariable("variable-name", value);

উদাহরণ

একটি পরিবর্তনশীল সেট করার একটি সাধারণ দৃশ্য হল যখন একটি API প্রক্সিকে গতিশীলভাবে লক্ষ্য URL লিখতে হবে। নিম্নলিখিত জাভাস্ক্রিপ্টটি USER.name নামক একটি ভেরিয়েবলের মান পায়, URL http://mocktarget.apigee.net?user= এ একটি ক্যোয়ারী প্যারামিটার হিসাবে সেই মানটিকে যুক্ত করে এবং তারপর পূর্ব-নির্ধারিত target.url সেই মানটিতে সেট করে .

context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));

context.removeVariable()

প্রসঙ্গ থেকে একটি পরিবর্তনশীল সরিয়ে দেয়।

সিনট্যাক্স

context.removeVariable('variable-name');

প্রসঙ্গ বস্তু বৈশিষ্ট্য

প্রসঙ্গ

flow প্রপার্টি হল একটি স্ট্রিং যা বর্তমান API প্রক্সি ফ্লোকে চিহ্নিত করে। এই বৈশিষ্ট্যটি যে প্রবাহে জাভাস্ক্রিপ্ট সংযুক্ত করা হয়েছে তা নির্দেশ করতে ব্যবহৃত হয়। সমর্থিত মান হল:

  • PROXY_REQ_FLOW
  • PROXY_RESP_FLOW
  • TARGET_REQ_FLOW
  • TARGET_RESP_FLOW

প্রতিটি ফ্লো নাম প্রক্সিএন্ডপয়েন্ট বা টার্গেটএন্ডপয়েন্টে সংজ্ঞায়িত প্রিফ্লো, পোস্টফ্লো এবং যেকোনো শর্তসাপেক্ষ ফ্লোকে অন্তর্ভুক্ত করে।

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

উদাহরণ

শুধুমাত্র টার্গেট রিকোয়েস্ট ফ্লোতে একটি HTTP হেডার সেট করুন:

if (context.flow=="TARGET_REQ_FLOW") {
     context.targetRequest.headers['TARGET-HEADER-X']='foo';
}

শুধুমাত্র প্রক্সি রেসপন্স ফ্লোতে বিষয়বস্তু সেট করুন:

if (context.flow=="PROXY_RESP_FLOW") {
     context.proxyResponse.content='bar';
}

context.session

নাম/মান জোড়ার একটি মানচিত্র যা একই বার্তা প্রসঙ্গের মধ্যে কার্যকরী দুটি নীতির মধ্যে বস্তুগুলিকে পাস করতে ব্যবহার করা যেতে পারে।

উদাহরণ

অধিবেশনে একটি মান সেট করুন:

context.session['key']  = 123;

সেশন থেকে মান পান:

var value = context.session['key']; // 123

প্রসঙ্গ বস্তু শিশুদের

নীচে দেখানো হিসাবে, একটি সম্পূর্ণ API প্রক্সি ফ্লো চারটি স্বতন্ত্র পর্যায়কে অন্তর্ভুক্ত করে, যার প্রতিটিতে একটি সম্পর্কিত বার্তা বস্তু রয়েছে যা প্রসঙ্গ অবজেক্টের একটি শিশু:

  • context.proxyRequest : অনুরোধকারী ক্লায়েন্টের কাছ থেকে প্রাপ্ত অন্তর্মুখী অনুরোধ বার্তা।
  • context.targetRequest : ব্যাকএন্ড সার্ভিসে পাঠানো আউটবাউন্ড অনুরোধ বার্তা।
  • context.proxyResponse : আউটবাউন্ড প্রতিক্রিয়া বার্তা অনুরোধকারী ক্লায়েন্টের কাছে ফিরে এসেছে।
  • context.targetResponse : ব্যাকএন্ড পরিষেবা থেকে প্রাপ্ত অন্তর্মুখী অনুরোধ বার্তা।

নিম্নলিখিত বিভাগগুলি এই বস্তুগুলির পদ্ধতি এবং বৈশিষ্ট্যগুলি বর্ণনা করে:

প্রসঙ্গ।* চাইল্ড অবজেক্টের জন্য অনুরোধ করুন

প্রতিটি HTTP লেনদেন একটি API প্রক্সিতে সম্পাদনের জন্য, দুটি অনুরোধ বার্তা অবজেক্ট তৈরি করা হয়: একটি ইনবাউন্ড (ক্লায়েন্ট থেকে অনুরোধ) এবং একটি আউটবাউন্ড (এপিআই প্রক্সি দ্বারা উত্পন্ন অনুরোধ এবং ব্যাকএন্ড লক্ষ্যে জমা দেওয়া হয়৷)

context বস্তুটিতে চাইল্ড অবজেক্ট রয়েছে যা এই অনুরোধ বার্তাগুলিকে উপস্থাপন করে: context.proxyRequest এবং context.targetRequest । এই অবজেক্টগুলি আপনাকে অনুরোধের প্রবাহের মধ্যে বৈশিষ্ট্যগুলি অ্যাক্সেস করতে দেয় যা আপনার জাভাস্ক্রিপ্ট কোড কার্যকর করার সুযোগে থাকে।

দ্রষ্টব্য: আপনি অনুরোধের প্রবাহে এই বৈশিষ্ট্যগুলি অ্যাক্সেস করতে শর্টহ্যান্ড অবজেক্ট request ব্যবহার করতে পারেন। request বস্তুটি context.proxyRequest বা context.targetRequest কে বোঝায়, আপনার জাভাস্ক্রিপ্ট কোডটি যে প্রবাহে কার্যকর হয় তার উপর নির্ভর করে।

প্রসঙ্গ।* চাইল্ড অবজেক্টের বৈশিষ্ট্যের জন্য অনুরোধ করুন

সম্পত্তির নাম বর্ণনা
url

url প্রপার্টি হল একটি রিড/রাইট সুবিধার প্রপার্টি যা টার্গেট রিকোয়েস্টের জন্য স্কিম, হোস্ট, পোর্ট, পাথ এবং কোয়েরি প্যারামিটারগুলিকে একত্রিত করে।

অনুরোধের সম্পূর্ণ URL নিম্নলিখিত বৈশিষ্ট্যগুলির সমন্বয়ে গঠিত:

  • প্রোটোকল: URL এর প্রোটোকল (উদাহরণস্বরূপ, HTTP, HTTPS)
  • পোর্ট: পোর্ট (উদাহরণস্বরূপ, :80, :443)
  • হোস্ট: URL এর হোস্ট (উদাহরণস্বরূপ, www.example.com)
  • পাথ: URI-এর পথ (উদাহরণস্বরূপ, /v1/mocktarget)

url পাওয়ার সময়, একটি URL নিম্নলিখিত বিন্যাসে ফেরত দেওয়া হয়:

protocol://host:port/path?queryParams

উদাহরণ:

context.targetRequest.url = 'http://www.example.com/path?q1=1'
context.targetRequest.protocol ='https';
headers

String => List ম্যাপিং হিসাবে HTTP অনুরোধ শিরোনাম

উদাহরণ:

এই HTTP অনুরোধের জন্য:

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
নিম্নলিখিত জাভাস্ক্রিপ্ট:
context.proxyRequest.headers['Content-Type'];
context.proxyRequest.headers['Authorization'];

নিম্নলিখিত মান প্রদান করবে

application/json
Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
queryParams

String => List ম্যাপিং হিসাবে অনুরোধ বার্তা ক্যোয়ারী প্যারামিটার।

উদাহরণ:

"?city=PaloAlto&city=NewYork"

হিসাবে অ্যাক্সেস করা যেতে পারে:

context.proxyRequest.queryParams['city'];  // == 'PaloAlto'
context.proxyRequest.queryParams['city'][0]     // == 'PaloAlto'
context.proxyRequest.queryParams['city'][1];    // == 'NewYork'
context.proxyRequest.queryParams['city'].length(); // == 2
method

অনুরোধের সাথে যুক্ত HTTP ক্রিয়া ( GET , POST , PUT , DELETE , PATCH , ইত্যাদি)

উদাহরণ:

এই অনুরোধের জন্য:

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z

নিম্নলিখিত জাভাস্ক্রিপ্ট:

context.proxyRequest.method;

নিম্নলিখিত মান প্রদান করবে

POST
body

HTTP অনুরোধের মেসেজ বডি (পেলোড)।

অনুরোধ সংস্থার নিম্নলিখিত সদস্য রয়েছে:

  • context.targetRequest.body.asXML;
  • context.targetRequest.body.asJSON;
  • context.targetRequest.body.asForm;

উদাহরণ:

একটি XML বডির জন্য:

<customer number='1'>
<name>Fred<name/>
<customer/>

XML অবজেক্টের উপাদানগুলিকে নিম্নরূপ অ্যাক্সেস করতে:

var name = context.targetRequest.body.asXML.name;

এক্সএমএল অ্যাট্রিবিউট অ্যাট্রিবিউট অ্যাক্সেস করতে, @ নোটেশন ব্যবহার করুন।

var number = context.targetRequest.body.asXML.@number;

একটি JSON অনুরোধ শরীরের জন্য:

{
"a":  1 ,
"b" : "2"
}
var a = context.proxyRequest.body.asJSON.a;    // == 1
var b = context.proxyRequest.body.asJSON.b;    // == 2

ফর্ম প্যারামিটার পড়তে:

"vehicle=Car&vehicle=Truck"
v0 = context.proxyRequest.body.asForm['vehicle'][0];
v1 = context.proxyRequest.body.asForm['vehicle'][1];

প্রসঙ্গ।* প্রতিক্রিয়া চাইল্ড অবজেক্ট

প্রতিটি HTTP লেনদেনের জন্য একটি API প্রক্সিতে সম্পাদন করা হয়, দুটি প্রতিক্রিয়া বার্তা অবজেক্ট তৈরি করা হয়: একটি ইনবাউন্ড (ব্যাকএন্ড পরিষেবা থেকে প্রতিক্রিয়া) এবং একটি আউটবাউন্ড (ক্লায়েন্টকে ফেরত পাঠানো প্রতিক্রিয়া।)

প্রসঙ্গ বস্তুটিতে চাইল্ড অবজেক্ট রয়েছে যা এই প্রতিক্রিয়া বার্তাগুলিকে উপস্থাপন করে: context.proxyResponse এবং context.targetResponse । এই অবজেক্টগুলি আপনাকে প্রতিক্রিয়া প্রবাহের মধ্যে বৈশিষ্ট্যগুলি অ্যাক্সেস করতে দেয় যা আপনার জাভাস্ক্রিপ্ট কোড কার্যকর করার সুযোগে থাকে।

দ্রষ্টব্য: আপনি একটি প্রতিক্রিয়া প্রবাহ থেকে এই বৈশিষ্ট্যগুলি অ্যাক্সেস করতে শর্টহ্যান্ড অবজেক্ট response ব্যবহার করতে পারেন। response অবজেক্টটি context.proxyResponse বা context.targetResponse কে বোঝায়, আপনার জাভাস্ক্রিপ্ট কোডটি যে প্রবাহে কার্যকর হয় তার উপর নির্ভর করে।

প্রসঙ্গ।* প্রতিক্রিয়া বস্তুর বৈশিষ্ট্য

সম্পত্তির নাম বর্ণনা
headers

String => List ম্যাপিং হিসাবে প্রতিক্রিয়া বার্তার HTTP শিরোনাম।

উদাহরণ:

var cookie = context.targetResponse.headers['Set-Cookie'];
status

একটি সম্পত্তি হিসাবে স্থিতি বার্তা সহ স্ট্যাটাস কোড। স্থিতি কোড এবং স্থিতি বার্তা উভয় বৈশিষ্ট্য হিসাবে উপলব্ধ.

উদাহরণ:

var status = context.targetResponse.status.code;   // 200
var msg = context.targetResponse.status.message;   // "OK"
content

প্রতিক্রিয়া বার্তার HTTP বডি (পেলোড সামগ্রী)।

প্রতিক্রিয়া সামগ্রীতে নিম্নলিখিত সদস্য রয়েছে:

context.targetResponse.content.asXML;
context.targetResponse.content.asJSON;

.asXML স্বরলিপি ব্যবহার করে

.asXML স্বরলিপি ব্যবহার করে একটি XML নথির মধ্য দিয়ে চলার একটি সহজ উপায় রয়েছে৷ এই বিভাগটি বর্ণনা করে কিভাবে এই স্বরলিপি ব্যবহার করতে হয় এবং এটি কিভাবে request.content এবং context.proxyRequest.content থেকে আলাদা।

যেমন:

request.content.asXML

বা

context.proxyRequest.content.asXML

*.content এবং *.content.asXML ফর্ম দুটিই একটি স্ট্রিং প্রসঙ্গে ব্যবহার করা যেতে পারে এবং জাভাস্ক্রিপ্ট তাদের স্ট্রিং হতে বাধ্য করবে। পূর্বের ক্ষেত্রে ( *.content ), স্ট্রিংটিতে সমস্ত ঘোষণার পাশাপাশি XML মন্তব্য অন্তর্ভুক্ত থাকে। পরবর্তী ক্ষেত্রে ( *.content.asXML ), ফলাফলের স্ট্রিং মান ঘোষণা এবং মন্তব্য থেকে পরিষ্কার করা হয়।

উদাহরণ

msg.content:

<?xml version="1.0" encoding="UTF-8"?>
<yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US">
   <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com"
   </yahoo:description>
</yahoo:error>
<!-- mg023.mail.gq1.yahoo.com uncompressed/chunked Sat Dec 14 01:23:35 UTC 2013 -->

msg.content.asXML:

<?xml version="1.0" encoding="UTF-8"?>
<yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US">
   <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com"
   </yahoo:description>
</yahoo:error>

উপরন্তু, আপনি উপাদান এবং গুণাবলীর নাম উল্লেখ করে XML অনুক্রম অতিক্রম করতে .asXML ফর্ম ব্যবহার করতে পারেন। অন্যান্য সিনট্যাক্স ব্যবহার করে অনুক্রমটি অতিক্রম করা সম্ভব নয়।

JavaScript print() স্টেটমেন্ট দিয়ে ডিবাগ করুন

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

if (context.flow=="PROXY_REQ_FLOW") {
     print("In proxy request flow");
     var username = context.getVariable("request.queryparam.user");
     print("Got query param: " + username);
     context.setVariable("USER.name", username);
     print("Set query param: " + context.getVariable("USER.name"));
}


if (context.flow=="TARGET_REQ_FLOW") {
     print("In target request flow");
     var username = context.getVariable("USER.name");
     var url = "http://mocktarget.apigee.net/user?"
     context.setVariable("target.url", url + "user=" + username);
     print("callout to URL: ", context.getVariable("target.url"));
}

আউটপুট দেখতে, ট্রেস উইন্ডোর নীচে সমস্ত লেনদেন থেকে আউটপুট নির্বাচন করুন। আপনি stepExecution-stdout নামে ট্রেস সম্পত্তিতেও আউটপুট খুঁজে পেতে পারেন।

http ক্লায়েন্টের সাথে জাভাস্ক্রিপ্ট কলআউট তৈরি করা

একটি API প্রক্সি ফ্লোতে কাস্টম জাভাস্ক্রিপ্ট কোডের মধ্যে থেকে যেকোন ইউআরএলে একাধিক, সমান্তরাল, অ্যাসিঙ্ক্রোনাস HTTP অনুরোধ করতে httpClient ব্যবহার করুন। httpClient অবজেক্ট Apigee Edge Javascript অবজেক্ট মডেল দ্বারা উন্মুক্ত করা হয়।

http ক্লায়েন্ট সম্পর্কে

httpClient অবজেক্ট জাভাস্ক্রিপ্ট অবজেক্ট মডেলের মাধ্যমে Apigee Edge এ চলমান কাস্টম জাভাস্ক্রিপ্ট কোডের সংস্পর্শে আসে। একটি API প্রক্সিতে কাস্টম জাভাস্ক্রিপ্ট সংযুক্ত করতে, আপনি JavaScript নীতি ব্যবহার করেন। যখন নীতি চলে, কাস্টম জাভাস্ক্রিপ্ট কোড কার্যকর হয়।

httpClient অবজেক্টটি কম্পোজিট সার্ভিস বা ম্যাশআপ তৈরির জন্য উপযোগী। উদাহরণস্বরূপ, আপনি একটি একক API পদ্ধতিতে একাধিক ব্যাকএন্ড কল একত্রিত করতে পারেন। এই বস্তুটি সাধারণত ServiceCallout নীতির বিকল্প হিসাবে ব্যবহৃত হয়।

এখানে একটি মৌলিক ব্যবহার প্যাটার্ন আছে. একটি রিকোয়েস্ট অবজেক্ট ইনস্ট্যান্টিয়েট করুন, এটিকে একটি ইউআরএল বরাদ্দ করুন (উদাহরণস্বরূপ, আপনি কল করতে চান এমন একটি ব্যাকএন্ড পরিষেবাতে), এবং সেই অনুরোধ অবজেক্টের সাথে httpClient.send কল করুন।

var myRequest = new Request();
myRequest.url = "http://www.example.com";
var exchangeObj = httpClient.send(myRequest);

httpক্লায়েন্ট রেফারেন্স

HTTP ক্লায়েন্ট দুটি পদ্ধতি প্রকাশ করে: get() এবং send()

httpClient.get()

সহজ HTTP GET অনুরোধের জন্য একটি সুবিধার পদ্ধতি, HTTP শিরোনামগুলির জন্য কোন সমর্থন ছাড়াই।

ব্যবহার

var exchangeObj = httpClient.get(url);

রিটার্নস

পদ্ধতিটি একটি exchange বস্তু প্রদান করে। এই বস্তুর কোন বৈশিষ্ট্য নেই, এবং এটি নিম্নলিখিত পদ্ধতিগুলি প্রকাশ করে:

  • isError() : (বুলিয়ান) http ক্লায়েন্ট সার্ভারের সাথে সংযোগ করতে অক্ষম হলে true ফেরত দেয়। HTTP স্ট্যাটাস কোড 4xx এবং 5xx ফলে isError() false হয়, কারণ সংযোগ সম্পূর্ণ হয়েছে এবং একটি বৈধ প্রতিক্রিয়া কোড ফিরে এসেছে। যদি isError() true রিটার্ন করে, তাহলে getResponse() এ কল করা জাভাস্ক্রিপ্ট undefined রিটার্ন করে।
  • isSuccess() : (বুলিয়ান) প্রেরন সম্পূর্ণ এবং সফল হলে true ফেরত দেয়।
  • isComplete() : (বুলিয়ান) অনুরোধ সম্পূর্ণ হলে true ফেরত দেয়।
  • waitForComplete() : অনুরোধ সম্পূর্ণ না হওয়া পর্যন্ত থ্রেডটি বিরতি দেয় (সফলতা বা ত্রুটি দ্বারা)।
  • getResponse() : (অবজেক্ট) httpClient.send() সম্পূর্ণ এবং সফল হলে প্রতিক্রিয়া অবজেক্ট প্রদান করে। প্রত্যাবর্তিত বস্তুর context.proxyResponse অবজেক্ট হিসাবে অভিন্ন পদ্ধতি এবং বৈশিষ্ট্য রয়েছে। প্রসঙ্গ অবজেক্ট সারাংশ দেখুন।
  • getError() : (স্ট্রিং) যদি httpClient.send() এ কল করার ফলে একটি ত্রুটি দেখা দেয়, তাহলে একটি স্ট্রিং হিসাবে ত্রুটি বার্তাটি ফেরত দেয়।

উদাহরণ

HTTP অনুরোধের বৈশিষ্ট্য সমন্বিত একটি সম্পূর্ণ কনফিগার করা অনুরোধ অবজেক্ট পাঠান। প্রতিক্রিয়া প্রক্রিয়া করতে একটি নন-ব্লকিং কলব্যাক ব্যবহার করুন।

// Add the required the headers for making a specific API request
var headers = {'X-SOME-HEADER' : 'some value' };
// Make a GET API request along with headers
var myRequest = new Request("http://www.example.com","GET",headers);

// Define the callback function and process the response from the GET API request
function onComplete(response,error) {
 // Check if the HTTP request was successful
    if (response) {
      context.setVariable('example.status', response.status);
     } else {
      context.setVariable('example.error', 'Woops: ' + error);
     }
}

// Specify the callback Function as an argument
httpClient.get(myRequest, onComplete);

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

একটি প্রক্সি ফ্লোতে কাস্টম জাভাস্ক্রিপ্ট কোড সংযুক্ত করতে JavaScript নীতি ব্যবহার করুন৷ জাভাস্ক্রিপ্ট নীতি দেখুন।

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

Apigee সম্প্রদায় নিবন্ধ

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