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

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

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

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

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

अनुरोधों को बैच करने की कुछ वजहें यहां दी गई हैं:

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

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

बैच अनुरोध लिखना

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

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