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

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

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

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

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

تشمل الأمثلة على أسباب تجميع طلباتك ما يلي:

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

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

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

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

  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 {ACCESS_TOKEN}' \
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
--data '
--batch_inventory
Content-Type: application/http
Content-ID: <get~en~US~123456>

GET /inventories/v1/accounts/123/products/en~US~123456/regionalInventories

--batch_inventory
Content-Type: application/http
Content-ID: <post~en~US~123456>

POST /inventories/v1/accounts/123/products/en~US~123456/regionalInventories:insert
{
  "region": "123456",
  "price": {
    "amountMicros": "100000000",
    "currencyCode": "USD"
  }
}

--batch_inventory--'

ملاحظات حول الطلب

  • قد لا يتم تنفيذ الطلبات بالترتيب الذي تحدّده.
  • استخدِم Content-ID لتحديد الطلبات الفردية.
  • إذا كنت بحاجة إلى تنفيذ طلباتك بترتيب معيّن، أرسِلها بشكل منفصل وانتظر الردّ على الطلب الأول قبل إرسال الطلب التالي.

قراءة ردّ مجمّع

في ما يلي مثال على استجابة مجمّعة لبروتوكول HTTP. قد لا يتطابق ترتيب الردود مع ترتيب الطلبات. استخدِم Content-ID لتحديد الطلب المضمّن الذي ينتمي إليه كل ردّ مضمّن. In the responses, the API adds a response- prefix to each 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--

الحدود

تخضع الطلبات المجمّعة للحدود التالية:

  • ‫2,000 طلب متداخل لكل طلب مجمّع

إذا تجاوز طلب مجمّع أيًا من هذه الحدود، ستعرض واجهة برمجة التطبيقات الخطأ 400 Bad Request وترفض الطلب بالكامل.