এই ডকুমেন্টটিতে দেখানো হয়েছে কীভাবে এপিআই কলগুলোকে একসাথে ব্যাচ করে আপনার ক্লায়েন্টকে কম সংখ্যক কানেকশন করতে হয়। ব্যাচিং নেটওয়ার্ক রাউন্ড ট্রিপ কমিয়ে এবং থ্রুপুট বাড়িয়ে একটি অ্যাপ্লিকেশনের কর্মদক্ষতা উন্নত করতে পারে।
সংক্ষিপ্ত বিবরণ
আপনার ক্লায়েন্টের প্রতিটি সংযোগের ফলে একটি নির্দিষ্ট পরিমাণ ওভারহেড তৈরি হয়। গুগল শিটস এপিআই ব্যাচিং সমর্থন করে, যা আপনার ক্লায়েন্টকে একাধিক রিকোয়েস্ট অবজেক্ট একটি একক ব্যাচ রিকোয়েস্টে রাখার সুযোগ দেয়, যেখানে প্রতিটি অবজেক্ট একটি নির্দিষ্ট ধরনের অনুরোধ সম্পাদনের জন্য নির্দেশ করে। একটি ব্যাচ রিকোয়েস্ট একাধিক সাব-রিকোয়েস্টকে সার্ভারে একটি একক কলে একত্রিত করে এবং একটি একক প্রতিক্রিয়া ফিরিয়ে এনে পারফরম্যান্স বাড়াতে পারে।
আমরা ব্যবহারকারীদের সর্বদা একাধিক অনুরোধ একসাথে ব্যাচ করতে উৎসাহিত করি। এখানে এমন কিছু পরিস্থিতির উদাহরণ দেওয়া হলো যেখানে আপনি ব্যাচিং ব্যবহার করতে পারেন:
- আপনি এইমাত্র এপিআই ব্যবহার করা শুরু করেছেন এবং আপনার কাছে আপলোড করার জন্য প্রচুর ডেটা রয়েছে।
- আপনাকে একাধিক অবজেক্টের মেটাডেটা বা ফরম্যাটিং-এর মতো প্রোপার্টি আপডেট করতে হবে।
- আপনাকে অনেকগুলো অবজেক্ট মুছে ফেলতে হবে।
সীমাবদ্ধতা, অনুমোদন, এবং নির্ভরশীলতার বিবেচ্য বিষয়
ব্যাচ আপডেটিং প্রয়োগ করার সময় বিবেচনা করার মতো অন্যান্য বিষয়গুলির একটি তালিকা নিচে দেওয়া হলো:
- সমস্ত উপ-অনুরোধ সহ প্রতিটি ব্যাচ অনুরোধ আপনার ব্যবহারের সীমার ক্ষেত্রে একটি এপিআই অনুরোধ হিসাবে গণনা করা হয়।
- একটি ব্যাচ অনুরোধ একবার প্রমাণীকরণ করা হয়। এই একক প্রমাণীকরণটি অনুরোধের সমস্ত ব্যাচ আপডেট অবজেক্টের ক্ষেত্রে প্রযোজ্য।
- সার্ভার সাব-রিকোয়েস্টগুলোকে ব্যাচ রিকোয়েস্টে যে ক্রমে থাকে, ঠিক সেই ক্রমেই প্রসেস করে। পরবর্তী সাব-রিকোয়েস্টগুলো পূর্ববর্তী সাব-রিকোয়েস্টগুলোর সময় নেওয়া পদক্ষেপের উপর নির্ভর করতে পারে। উদাহরণস্বরূপ, একই ব্যাচ রিকোয়েস্টে, ব্যবহারকারীরা একটি বিদ্যমান ডকুমেন্টে টেক্সট যোগ করতে এবং তারপর সেটিকে স্টাইল করতে পারেন।
ব্যাচের বিবরণ
একটি ব্যাচ রিকোয়েস্টে একটি batchUpdate মেথড কল থাকে, যার অধীনে একাধিক সাব-রিকোয়েস্ট থাকে, যেমন—একটি স্প্রেডশিট যোগ করা এবং তারপর সেটিকে ফরম্যাট করার জন্য।
প্রয়োগ করার আগে প্রতিটি অনুরোধ যাচাই করা হয়। ব্যাচ আপডেটের সমস্ত উপ-অনুরোধ অ্যাটমিকভাবে প্রয়োগ করা হয়। অর্থাৎ, যদি কোনো অনুরোধ বৈধ না হয়, তাহলে সম্পূর্ণ আপডেটটি অসফল হয় এবং (সম্ভাব্য নির্ভরশীল) কোনো পরিবর্তনই প্রয়োগ করা হয় না।
কিছু অনুরোধের প্রতিক্রিয়ায় প্রয়োগকৃত অনুরোধগুলো সম্পর্কে তথ্য পাওয়া যায়। উদাহরণস্বরূপ, অবজেক্ট যোগ করার সমস্ত ব্যাচ আপডেট অনুরোধ এমন প্রতিক্রিয়া ফেরত দেয়, যার মাধ্যমে আপনি নতুন যোগ করা অবজেক্টের মেটাডেটা, যেমন আইডি বা শিরোনাম, অ্যাক্সেস করতে পারেন।
এই পদ্ধতির মাধ্যমে, আপনি একাধিক উপ-অনুরোধ সহ একটিমাত্র এপিআই ব্যাচ আপডেট অনুরোধ ব্যবহার করে একটি সম্পূর্ণ গুগল ডকুমেন্ট তৈরি করতে পারেন।
ব্যাচ অনুরোধের ফরম্যাট
একটি রিকোয়েস্ট হলো একটি একক JSON রিকোয়েস্ট, যার মধ্যে একাধিক নেস্টেড সাব-রিকোয়েস্ট থাকে এবং এতে requests নামক একটি আবশ্যিক প্রপার্টি থাকে। রিকোয়েস্টগুলো স্বতন্ত্র রিকোয়েস্টের একটি অ্যারে হিসেবে গঠিত হয়। প্রতিটি রিকোয়েস্ট, রিকোয়েস্ট অবজেক্টকে উপস্থাপন করতে এবং এর প্রপার্টিগুলো ধারণ করতে JSON ব্যবহার করে।
ব্যাচ প্রতিক্রিয়ার বিন্যাস
ব্যাচ রিকোয়েস্টের রেসপন্স ফরম্যাটটি রিকোয়েস্ট ফরম্যাটের মতোই। সার্ভারের রেসপন্সে একটিমাত্র রেসপন্স অবজেক্টের সম্পূর্ণ উত্তর থাকে।
মূল JSON অবজেক্টের প্রপার্টির নাম হলো replies । রেসপন্সগুলো একটি অ্যারেতে ফেরত দেওয়া হয়, যেখানে প্রতিটি রিকোয়েস্টের রেসপন্স সংশ্লিষ্ট রিকোয়েস্টের ইন্ডেক্স ক্রমেই থাকে। কিছু রিকোয়েস্টের কোনো রেসপন্স থাকে না এবং সেই অ্যারে ইন্ডেক্সের রেসপন্সটি খালি থাকে।
উদাহরণ
নিম্নলিখিত উদাহরণটিতে শীটস এপিআই (Sheets API)-এর সাথে ব্যাচিং (batching)-এর ব্যবহার দেখানো হয়েছে।
অনুরোধ
এই উদাহরণ ব্যাচ অনুরোধটি দেখায় কিভাবে:
-
AddSheetRequestব্যবহার করে একটি বিদ্যমান স্প্রেডশীটে 12345sheetIdসহ একটি নতুন শীট যোগ করুন। -
UpdateCellsRequestব্যবহার করে নতুন শীটে A1 সেল থেকে ডেটা যোগ করুন। - নতুন শীটটিতে একটি
namedRangeবা ফিল্টার ভিউ যোগ করুন।
অনুরোধে শীট আইডি যোগ করার মাধ্যমে, ব্যবহারকারীরা একই এপিআই কলের মধ্যে অন্যান্য উপ-অনুরোধের জন্যও শীট আইডিটি ব্যবহার করতে পারেন। এটি রাইট-রিড-রাইট চক্র এড়ানোর মাধ্যমে পারফরম্যান্স উন্নত করে।
বিভিন্ন বিভাগে বিভক্ত ব্যাচ আপডেট অনুরোধের প্রকারভেদের তালিকার জন্য, ‘ব্যাচ আপডেট অপারেশন’ এর অধীনে থাকা সারণিটি দেখুন।
{
"requests":[
{
"addSheet":{
"properties":{
"sheetId":123456
}
}
},
{
"updateCells":{
"start":{
"sheetId":123456
},
"rows":[
{
"values":[
{
"userEnteredValue":{
"stringValue":"hello"
}
}
]
},
{
"values":[
{
"userEnteredValue":{
"stringValue":"world"
}
}
]
}
],
"fields":"userEnteredValue"
}
},
{
"addNamedRange":{
"namedRange":{
"name":"newRange",
"range":{
"sheetId":123456,
"endRowIndex":2
}
}
}
}
]
}প্রতিক্রিয়া
এই উদাহরণ ব্যাচ রেসপন্সটি দেখায় যে ব্যাচ রিকোয়েস্টের ভেতরের প্রতিটি সাব-রিকোয়েস্ট কীভাবে প্রয়োগ করা হয়েছিল। লক্ষ্য করুন, UpdateCellsRequest এ কোনো রেসপন্স নেই, তাই অ্যারের [1] -এ থাকা ইনডেক্স ভ্যালুটি খালি কার্লি ব্র্যাকেট দিয়ে গঠিত।
"replies":[
{
"addSheet":{
"properties":{
"sheetId":123456,
"title":"Sheet3",
"index":2,
"sheetType":"GRID",
"gridProperties":{
"rowCount":1000,
"columnCount":26
}
}
}
},
{
},
{
"addNamedRange":{
"namedRange":{
"namedRangeId":"2104325079",
"name":"newRange",
"range":{
"sheetId":123456,
"startRowIndex":0,
"endRowIndex":2,
"startColumnIndex":0,
"endColumnIndex":26
}
}
}
}
]