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

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