إرسال طلبات متعددة في آنٍ واحد

يمكنك استخدام الطلبات المجمّعة مع Merchant API لإرسال طلبات HTTP متعددة في طلب واحد من واجهة برمجة التطبيقات.

إذا كنت تفضّل إجراء التجميع باستخدام مكتبات العميل، يمكنك الاطّلاع على إعادة تصميم الرمز البرمجي لتنفيذ الطلبات المتزامنة.

طلب الدُفعة هو طلب HTTP عادي واحد يحتوي على عدة طلبات للحصول على البيانات من واجهة برمجة التطبيقات، باستخدام نوع المحتوى multipart/mixed. ضمن طلب HTTP الرئيسي، يحتوي كل جزء على طلب HTTP متداخل.

يمكنك إرسال الطلب المُجمّع إلى batchPath المحدّد لواجهة برمجة التطبيقات. الحد الأقصى لعدد الطلبات في الدقيقة batchPath لواجهة Merchant API هو batch/{sub-api}/v1. يمكنك العثور على batchPath لواجهات برمجة التطبيقات الأخرى في مستندات الاستكشاف الخاصة بها.

تشمل أمثلة أسباب تجميع الطلبات في حِزم ما يلي:

  • لقد بدأت للتو في استخدام واجهة برمجة التطبيقات ولديك الكثير من البيانات لتحميلها.
  • أجرى أحد المستخدمين تغييرات على البيانات أثناء عدم اتصال تطبيقك بالإنترنت، ويحتاج تطبيقك إلى مزامنة البيانات المحلية مع الخادم.

يمنع إرسال طلبات متعدّدة بالتوازي انتظار أبطأ طلب فرعي، ما يؤدي إلى تحسين أوقات استجابة الخادم وتقليل وقت الاستجابة.

كتابة طلب مجمّع

في ما يلي نموذج لطلب مجمّع في Merchant API. يجمع هذا الطلب بين طلب get لاسترداد المخزون الإقليمي لمنتج معيّن، وطلب insert لتعديل المخزون الإقليمي للمنتج نفسه. يجب اتّباع تنسيق المثال بالضبط:

  1. استخدِم https://merchantapi.googleapis.com/batch/{sub-api}/v1 كعنوان URL الأساسي.
  2. حدِّد حدًا فاصلاً لفصل كل طلب متداخل، مثلاً: -H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
  3. افصل بين كل طلب متداخل باستخدام الحدّ، مثلاً --batch_inventory.
  4. أدرِج Content-Type: application/http في بداية كل طلب متداخل.
  5. استخدِم Content-ID لتصنيف كل طلب متداخل باستخدام المعرّف الخاص بك. على سبيل المثال: Content-ID: <get~en~US~123456>.
  6. أدرِج سطرًا فارغًا بين العنوان والمسار ونص كل طلب متداخل. إذا لم يكن للطلب المتداخل نص، اترك سطرًا فارغًا قبل الحد التالي.
  7. لا تُدرِج عنوان URL الأساسي في كل طلب متداخل على حدة.
  8. اختتِم الطلب الرئيسي بحدود نهائية، مثل --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 لتحديد الطلب المضمّن الذي ينتمي إليه كل رد مضمّن. في الردود، تضيف واجهة برمجة التطبيقات البادئة response- إلى كل Content-ID.

--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--
'