আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
Apigee Edge-এ জাভাস্ক্রিপ্ট নীতি আপনাকে কাস্টম কোড যোগ করতে দেয় যা API প্রক্সি ফ্লোয়ের মধ্যে এক্সিকিউট হয়। যেমন, JavaScript নীতিতে কাস্টম কোড এইসব কাজে ব্যবহার করা যেতে পারে:
- ফ্লো ভেরিয়েবেল পাওয়া ও সেট করা
- কাস্টম লজিক এক্সিকিউট করা এবং ফল্ট হ্যান্ডেল করা
- অনুরোধ বা উত্তর থেকে ডেটা এক্সট্র্যাক্ট করা
- ব্যাকএন্ড টার্গেট URL ডায়নামিক এডিট করা
- অনুরোধ বা উত্তর থেকে ডাইনামিক পদ্ধতিতে হেডার যোগ করা বা সরানো
- JSON উত্তর পার্স করা
HTTP ক্লায়েন্ট
জাভাস্ক্রিপ্ট নীতির একটি শক্তিশালী ফিচার হল HTTP ক্লায়েন্ট। HTTP ক্লায়েন্ট (বা httpClient অবজেক্ট) ব্যাকএন্ড বা এক্সটার্নাল পরিষেবায় এক বা একাধিক কল করার জন্য ব্যবহার করা যেতে পারে। একাধিক এক্সটার্নাল পরিষেবায় কল করার প্রয়োজন হলে এবং একটি API-তে উত্তরগুলি একত্রিত করার প্রয়োজন হলে, HTTP ক্লায়েন্ট বিশেষভাবে উপযোগী।
httpClient অবজেক্টের মাধ্যমে ব্যাকএন্ডে কল করা স্যাম্পেল জাভাস্ক্রিপ্ট কোড
var headers = {'X-SOME-HEADER' : 'some value' };
var myRequest = new Request("http://www.example.com","GET",headers);
var exchange = httpClient.send(myRequest);
HTTP অনুরোধ করার জন্য httpClient অবজেক্ট দুটি পদ্ধতি get ও send (send উপরের নমুনা কোডে ব্যবহার করা হয়েছে) প্রকাশ করে। দুটি পদ্ধতিই অ্যাসিঙ্ক্রোনাস এবং আসল HTTP অনুরোধ সম্পূর্ণ হওয়ার আগে একটি exchange অবজেক্ট রিটার্ন করে।
HTTP অনুরোধে কয়েক সেকেন্ড থেকে কয়েক মিনিট সময় লাগতে পারে। HTTP অনুরোধ করার পরে, এটি কখন সম্পূর্ণ হয়েছে তা জানা গুরুত্বপূর্ণ, যাতে অনুরোধের উত্তর প্রসেস করা যায়। HTTP অনুরোধ কখন সম্পূর্ণ হয়েছে তা নির্ধারণ করার সবচেয়ে সাধারণ উপায়গুলির মধ্যে একটি হল exchange অবজেক্টের waitForComplete() মেথড ইনভোক করা।
waitForComplete()
HTTP অনুরোধ সম্পূর্ণ না হওয়া পর্যন্ত এবং কোনও উত্তর (সফল/ব্যর্থ) না পাওয়া পর্যন্ত waitForComplete() পদ্ধতি থ্রেড পজ করে রাখে। তারপরে, ব্যাকএন্ড বা এক্সটার্নাল পরিষেবার উত্তর প্রসেস করা যেতে পারে।
waitForComplete() সহ জাভাস্ক্রিপ্ট কোডের নমুনা
var headers = {'X-SOME-HEADER' : 'some value' };
var myRequest = new Request("http://www.example.com","GET",headers);
var exchange = httpClient.send(myRequest);
// Wait for the asynchronous GET request to finish
exchange.waitForComplete();
// Get and Process the response
if (exchange.isSuccess()) {
var responseObj = exchange.getResponse().content.asJSON;
return responseObj.access_token;
} else if (exchange.isError()) {
throw new Error(exchange.getError());
}
অ্যান্টিপ্যাটার্ন
জাভাস্ক্রিপ্ট কোডে HTTP অনুরোধ পাঠানোর পরে waitForComplete() ব্যবহার করলে পারফর্ম্যান্সের উপর প্রভাব পড়বে।
HTTP অনুরোধ পাঠানোর পরে waitForComplete() কল করে এমন নিম্নলিখিত জাভাস্ক্রিপ্ট কোড বিবেচনা করুন।
sample.js-এর জন্য কোড
// Send the HTTP request
var exchangeObj = httpClient.get("http://example.com");
// Wait until the request is completed
exchangeObj.waitForComplete();
// Check if the request was successful
if (exchangeObj.isSuccess()) {
response = exchangeObj.getResponse();
context.setVariable('example.status', response1.status);
} else {
error = exchangeObj.getError();
context.setVariable('example.error', 'Woops: ' + error);
}
এই উদাহরণে:
- জাভাস্ক্রিপ্ট কোড ব্যাকএন্ড API-তে একটি HTTP অনুরোধ পাঠায়।
- তারপরে, অনুরোধ সম্পূর্ণ না হওয়া পর্যন্ত এক্সিকিউশন পজ করার জন্য এটি
waitForComplete()-কে কল করে।waitForComplete()API, জাভাস্ক্রিপ্ট কোড এক্সিকিউট করা থ্রেডকে ব্লক করে দেয় যতক্ষণ না ব্যাকএন্ড অনুরোধ প্রসেস করা সম্পূর্ণ করে এবং উত্তর দেয়।
মেসেজ প্রসেসরে যেকোনও সময় একসাথে চালানো যায় এমন থ্রেডের সংখ্যার উপর সর্বোচ্চ সীমা (৩০%) আছে। সেই সীমায় পৌঁছে যাওয়ার পরে, JavaScript কোড এক্সিকিউট করার জন্য কোনও থ্রেড উপলভ্য থাকবে না। তাই, JavaScript কোডে waitForComplete() API-এর জন্য একসাথে অনেক অনুরোধ এক্সিকিউট করা হলে, JavaScript নীতি টাইম-আউট হওয়ার আগেই পরবর্তী অনুরোধগুলি 500 ইন্টার্নাল সার্ভার সমস্যা এবং 'টাইম-আউট হয়ে গেছে' সমস্যার মেসেজ সহ ব্যর্থ হবে।
সাধারণত, ব্যাকএন্ডে অনুরোধ প্রসেস করতে অনেক সময় লাগলে বা ট্রাফিক বেশি থাকলে এই পরিস্থিতি তৈরি হতে পারে।
প্রভাব
- JavaScript কোডে
waitForComplete()এক্সিকিউট করা কনকারেন্ট অনুরোধের সংখ্যা পূর্বনির্ধারিত সীমা অতিক্রম করলে, API অনুরোধ 500 ইন্টার্নাল সার্ভার এরর ও 'টাইম-আউট' সমস্যার মেসেজ সহ ব্যর্থ হবে। - সমস্যার কারণ নির্ণয় করা কঠিন হতে পারে, কারণ নির্দিষ্ট JavaScript নীতির সময়সীমা শেষ না হওয়া সত্ত্বেও JavaScript 'টাইম-আউট' সংক্রান্ত সমস্যার কারণে কাজ করে না।
পেশাদার পদ্ধতি
কলআউট কোড স্ট্রিমলাইন করতে এবং পারফর্ম্যান্স উন্নত করতে HTTP ক্লায়েন্টে কলব্যাক ব্যবহার করুন এবং জাভাস্ক্রিপ্ট কোডে waitForComplete() ব্যবহার করা এড়িয়ে চলুন। এই পদ্ধতি নিশ্চিত করে যে HTTP অনুরোধ সম্পূর্ণ না হওয়া পর্যন্ত JavaScript এক্সিকিউট করা থ্রেড ব্লক করা হয় না।
কলব্যাক ব্যবহার করা হলে, থ্রেডটি JavaScript কোডে HTTP অনুরোধ পাঠায় এবং পুলে ফিরে আসে। থ্রেডটি আর ব্লক করা নেই বলে, এটি অন্যান্য অনুরোধ হ্যান্ডেল করতে উপলভ্য। HTTP অনুরোধ সম্পূর্ণ হয়ে গেলে এবং কলব্যাক এক্সিকিউট করার জন্য রেডি হয়ে গেলে, একটি টাস্ক তৈরি করা হবে এবং টাস্কের সারিতে যোগ করা হবে। টাস্কের অগ্রাধিকারের উপর ভিত্তি করে পুলের একটি থ্রেড কলব্যাক এক্সিকিউট করবে।
httpClient-এ কলব্যাক ব্যবহার করে জাভাস্ক্রিপ্ট কোডের নমুনা
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("http://example.com", onComplete);