אתם יכולים להשתמש בבקשות באצווה עם Merchant API כדי לשלוח כמה בקשות HTTP בקריאה אחת ל-API.
אם אתם מעדיפים לבצע אצווה באמצעות ספריות לקוח, קראו את המאמר Refactor code for concurrent requests.
בקשת Batch היא בקשת HTTP רגילה אחת שמכילה מספר קריאות ל-API, עם סוג התוכן multipart/mixed. בבקשת ה-HTTP הראשית, כל חלק מכיל בתוכו בקשת HTTP פנימית.
אתם יכולים לשלוח את בקשת ה-Batch אל ה-batchPath שצוין ל-API.
batchPath של Merchant API הוא batch/{sub-api}/v1. אפשר למצוא את batchPath של ממשקי API אחרים במסמכי ה-Discovery שלהם.
דוגמאות לסיבות לשליחת בקשות באצווה:
- רק התחלתם להשתמש ב-API ויש לכם הרבה נתונים להעלות.
- משתמש ביצע שינויים בנתונים כשהאפליקציה הייתה אופליין, והאפליקציה צריכה לסנכרן את הנתונים המקומיים עם השרת.
שליחת כמה בקשות במקביל מונעת המתנה לבקשת המשנה האיטית ביותר, וכך משפרת את זמני התגובה של השרת ומקצרת את זמן האחזור.
כתיבת בקשת Batch
הנה דוגמה לבקשת Batch של Merchant API. הבקשה הזו משלבת בקשת GET כדי לאחזר את המלאי האזורי של מוצר, ובקשת insert כדי לעדכן את המלאי האזורי של אותו מוצר. צריך לפעול בדיוק לפי הפורמט שבדוגמה:
- משתמשים ב-
https://merchantapi.googleapis.com/batch/{sub-api}/v1בתור כתובת ה-URL הבסיסית. - מציינים גבול כדי להפריד בין כל בקשה בתצוגת עץ, לדוגמה:
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \ - מפרידים בין כל בקשה בתחום באמצעות הגבול, לדוגמה
--batch_inventory. - צריך לכלול את
Content-Type: application/httpבתחילת כל בקשה בתצוגת עץ. - אפשר להשתמש ב-
Content-IDכדי לתייג כל בקשה בתצוגת עץ במזהה משלכם. לדוגמה:Content-ID: <get~en~US~123456>. - צריך להוסיף שורה ריקה בין הכותרת, הנתיב והגוף של כל בקשה בתצוגת עץ. אם לבקשה המקוננת אין גוף, משאירים שורה ריקה לפני הגבול הבא.
- אל תכללו את כתובת ה-URL הבסיסית בכל בקשה פנימית.
- מסיימים את הבקשה הראשית עם גבול סופי, לדוגמה
--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 כדי לזהות לאיזו בקשה מוטמעת שייכת כל תשובה מוטמעת. בתשובות, ה-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--
מגבלות
לבקשות Batch יש את המגבלות הבאות:
- 2,000 בקשות מקוננות לכל בקשת Batch.
אם בקשת Batch חורגת מאחת מהמגבלות האלה, ה-API מחזיר שגיאה מסוג 400 Bad Request ודוחה את כל הבקשה.