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

يمكنك استخدام الطلبات المجمّعة مع 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--
'