আপনি মার্চেন্ট এপিআই-এর সাথে ব্যাচ রিকোয়েস্ট ব্যবহার করে একটিমাত্র এপিআই কলে একাধিক এইচটিটিপি রিকোয়েস্ট পাঠাতে পারেন।
আপনি যদি ক্লায়েন্ট লাইব্রেরি ব্যবহার করে ব্যাচিং করতে পছন্দ করেন, তাহলে যুগপৎ অনুরোধের জন্য কোড রিফ্যাক্টর করুন (Refactor code for concurrent requests) দেখুন।
ব্যাচ রিকোয়েস্ট হলো একটি একক স্ট্যান্ডার্ড HTTP রিকোয়েস্ট, যাতে multipart/mixed কন্টেন্ট টাইপ ব্যবহার করে একাধিক API কল থাকে। মূল HTTP রিকোয়েস্টের প্রতিটি পার্টের মধ্যে একটি নেস্টেড HTTP রিকোয়েস্ট থাকে।
আপনি এপিআই-এর জন্য নির্দিষ্ট batchPath এ ব্যাচ রিকোয়েস্ট পাঠাতে পারেন। মার্চেন্ট এপিআই-এর batchPath হলো batch/{sub-api}/v1 । আপনি অন্যান্য এপিআই-এর batchPath তাদের ডিসকভারি ডকুমেন্ট- এ খুঁজে নিতে পারেন।
আপনার অনুরোধগুলো একসাথে পাঠানোর কারণগুলোর কয়েকটি উদাহরণ হলো:
- আপনি এইমাত্র এপিআই ব্যবহার শুরু করেছেন এবং আপনার কাছে আপলোড করার জন্য প্রচুর ডেটা রয়েছে।
- আপনার অ্যাপ্লিকেশনটি অফলাইনে থাকাকালীন একজন ব্যবহারকারী ডেটাতে পরিবর্তন করেছেন, এবং আপনার অ্যাপ্লিকেশনটিকে সার্ভারের সাথে স্থানীয় ডেটা সিঙ্ক্রোনাইজ করতে হবে।
সমান্তরালভাবে একাধিক অনুরোধ পাঠানোর ফলে আপনাকে সবচেয়ে ধীরগতির উপ-অনুরোধটির জন্য অপেক্ষা করতে হয় না, যা সার্ভারের প্রতিক্রিয়ার সময় উন্নত করে এবং লেটেন্সি কমায়।
ব্যাচ অনুরোধ লিখুন
এখানে একটি নমুনা মার্চেন্ট এপিআই ব্যাচ রিকোয়েস্ট দেওয়া হলো। এই রিকোয়েস্টটিতে একটি পণ্যের আঞ্চলিক ইনভেন্টরি পুনরুদ্ধার করার জন্য একটি গেট রিকোয়েস্ট এবং একই পণ্যের আঞ্চলিক ইনভেন্টরি আপডেট করার জন্য একটি ইনসার্ট রিকোয়েস্ট একত্রিত করা হয়েছে। আপনাকে উদাহরণটির ফরম্যাটটি হুবহু অনুসরণ করতে হবে:
- বেস ইউআরএল হিসেবে
https://merchantapi.googleapis.com/batch/{sub-api}/v1ব্যবহার করুন। - প্রতিটি নেস্টেড রিকোয়েস্টকে আলাদা করতে একটি বাউন্ডারি নির্দিষ্ট করুন, উদাহরণস্বরূপ:
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \ - প্রতিটি নেস্টেড রিকোয়েস্টকে বাউন্ডারি দিয়ে আলাদা করুন, যেমন
--batch_inventory। - প্রতিটি নেস্টেড রিকোয়েস্টের শুরুতে
Content-Type: application/httpঅন্তর্ভুক্ত করুন। - প্রতিটি নেস্টেড রিকোয়েস্টকে আপনার নিজস্ব আইডি দিয়ে লেবেল করতে
Content-IDব্যবহার করুন। উদাহরণস্বরূপ:Content-ID: <get~en~US~123456>। - প্রতিটি নেস্টেড রিকোয়েস্টের হেডার, পাথ এবং বডির মধ্যে একটি ফাঁকা লাইন রাখুন। যদি নেস্টেড রিকোয়েস্টটির কোনো বডি না থাকে, তাহলে পরবর্তী বাউন্ডারির আগে একটি ফাঁকা লাইন রাখুন।
- প্রতিটি স্বতন্ত্র নেস্টেড অনুরোধে বেস ইউআরএল অন্তর্ভুক্ত করবেন না।
- মূল অনুরোধটি একটি চূড়ান্ত সীমানা দিয়ে শেষ করুন, যেমন
--batch_inventory–।
curl https://merchantapi.googleapis.com/batch/inventories/v1 \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
--data '
--batch_inventory
Content-Type: application/http
Content-ID: <get:online:en:US:123456>
GET /inventories/v1/accounts/123/products/online:en:US:123456/regionalInventories
--batch_inventory
Content-Type: application/http
Content-ID: <post:online:en:US:123456>
POST /inventories/v1/accounts/123/products/online:en:US:123456/regionalInventories:insert
{
"region: "123456",
"price": {
"amountMicros": "100000000",
"currencyCode": "USD"
}
}
--batch_inventory--
'
অর্ডার করার বিষয়ে নোট
- আপনার নির্দিষ্ট করা ক্রমানুসারে অনুরোধগুলো কার্যকর নাও হতে পারে।
- স্বতন্ত্র অনুরোধ শনাক্ত করতে
Content-IDব্যবহার করুন। - যদি আপনাকে একটি নির্দিষ্ট ক্রমে কলগুলো সম্পাদন করতে হয়, তবে সেগুলো আলাদাভাবে পাঠান এবং পরবর্তীটি পাঠানোর আগে প্রথম অনুরোধের প্রতিক্রিয়ার জন্য অপেক্ষা করুন।
ব্যাচ প্রতিক্রিয়া পড়ুন
এখানে একটি HTTP ব্যাচ রেসপন্সের উদাহরণ দেওয়া হলো। রেসপন্সগুলোর ক্রম রিকোয়েস্টগুলোর ক্রমের সাথে নাও মিলতে পারে। প্রতিটি নেস্টেড রেসপন্স কোন নেস্টেড রিকোয়েস্টের অন্তর্গত, তা শনাক্ত করতে Content-ID ব্যবহার করুন। রেসপন্সগুলোতে, API প্রতিটি Content-ID সাথে একটি response- প্রিফিক্স যোগ করে।
--batch_inventory
Content-Type: application/http
Content-ID: <response-get~en~US~123456>
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer
{}
--batch_inventory
Content-Type: application/http
Content-ID: <response-post~en~US~123456>
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer
{
"name": "accounts/123/products/en~US~123456/regionalInventories/123456",
"region": "123456",
"price": {
"amountMicros": "100000000",
"currencyCode": "USD"
}
}
--batch_inventory--
'