एक साथ कई अनुरोध भेजना

Merchant API के साथ बैच अनुरोधों का इस्तेमाल करके, एक ही एपीआई कॉल में कई एचटीटीपी अनुरोध भेजे जा सकते हैं.

अगर आपको क्लाइंट लाइब्रेरी की मदद से एक साथ कई अनुरोध भेजने हैं, तो एक साथ कई अनुरोध भेजने के लिए कोड में बदलाव करना लेख पढ़ें.

बैच अनुरोध एक स्टैंडर्ड एचटीटीपी अनुरोध होता है. इसमें कई एपीआई कॉल शामिल होते हैं. यह multipart/mixed कॉन्टेंट टाइप का इस्तेमाल करता है. मुख्य एचटीटीपी अनुरोध में, हर हिस्से में नेस्ट किया गया एचटीटीपी अनुरोध होता है.

एपीआई के लिए, बताए गए batchPath पर एक साथ कई अनुरोध भेजे जा सकते हैं. Merchant API के लिए batchPath batch/{sub-api}/v1 है. आपको अन्य एपीआई के लिए batchPath, उनके खोज से जुड़े दस्तावेज़ों में मिल सकता है. अनुरोधों को बैच करने की वजहों के उदाहरण:

  • आपने अभी-अभी एपीआई का इस्तेमाल शुरू किया है और आपको बहुत सारा डेटा अपलोड करना है.
  • जब आपका ऐप्लिकेशन ऑफ़लाइन था, तब किसी उपयोगकर्ता ने डेटा में बदलाव किया. अब आपके ऐप्लिकेशन को स्थानीय डेटा को सर्वर के साथ सिंक करना है.

एक साथ कई अनुरोध भेजने से, आपको सबसे धीमे सब-अनुरोध के लिए इंतज़ार नहीं करना पड़ता. इससे सर्वर के जवाब देने में लगने वाला समय कम हो जाता है और इंतज़ार का समय भी कम हो जाता है.

एक साथ कई अनुरोध लिखना

यहां Merchant API के बैच अनुरोध का एक सैंपल दिया गया है. इस अनुरोध में, किसी प्रॉडक्ट की रीजनल इन्वेंट्री पाने के लिए get अनुरोध और उसी प्रॉडक्ट की रीजनल इन्वेंट्री अपडेट करने के लिए insert अनुरोध शामिल है. आपको उदाहरण में दिए गए फ़ॉर्मैट का पालन करना चाहिए:

  1. बेस यूआरएल के तौर पर, https://merchantapi.googleapis.com/batch/{sub-api}/v1 का इस्तेमाल करें.
  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. नेस्ट किए गए हर अनुरोध में, बेस यूआरएल शामिल न करें.
  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 का इस्तेमाल करें.
  • अगर आपको कॉल को किसी क्रम में एग्ज़ीक्यूट करना है, तो उन्हें अलग-अलग भेजें. साथ ही, अगला अनुरोध भेजने से पहले, पहले अनुरोध के जवाब का इंतज़ार करें.

बैच रिस्पॉन्स पढ़ना

यहां एचटीटीपी बैच रिस्पॉन्स का एक उदाहरण दिया गया है. ऐसा हो सकता है कि जवाबों का क्रम, अनुरोधों के क्रम से मेल न खाए. Content-ID का इस्तेमाल करके, यह पता लगाएं कि नेस्ट किया गया हर जवाब, नेस्ट किए गए किस अनुरोध से जुड़ा है. जवाबों में, एपीआई हर Content-ID में response- प्रीफ़िक्स जोड़ता है.

--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--
'