שליחת כמה בקשות בבת אחת

אפשר להשתמש בבקשות באצווה עם Merchant API כדי לשלוח כמה בקשות HTTP בקריאה אחת ל-API.

אם אתם מעדיפים לבצע את האגד באמצעות ספריות לקוח, כדאי לעיין במאמר בנושא שינוי מבנה הקוד לבקשות מקבילות.

בקשה באצווה היא בקשת HTTP רגילה אחת שמכילה מספר קריאות ל-API, עם סוג התוכן multipart/mixed. בבקשת ה-HTTP הראשית, כל חלק מכיל בתוכו בקשת HTTP פנימית.

אפשר לשלוח את הבקשה באצווה אל batchPath שצוין עבור ה-API. הגרסה של Merchant API היא batch/{sub-api}/v1.batchPath אפשר למצוא את batchPath של ממשקי API אחרים במסמכי הגילוי שלהם.

דוגמאות לסיבות לאיגוד בקשות:

  • רק התחלתם להשתמש ב-API ויש לכם הרבה נתונים להעלות.
  • משתמש ביצע שינויים בנתונים בזמן שהאפליקציה הייתה אופליין, והאפליקציה צריכה לסנכרן את הנתונים המקומיים עם השרת.

שליחת כמה בקשות במקביל מונעת את ההמתנה לבקשת המשנה הכי איטית, וכך משפרת את זמני התגובה של השרת ומקצרת את זמן האחזור.

כתיבת בקשה באצווה

הנה דוגמה לבקשת אצווה של 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 כדי לזהות את הבקשה המקוננת שאליה שייכת כל תשובה מקוננת. בתגובות, ה-API מוסיף את התחילית 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--
'