बैच अनुरोध

इस दस्तावेज़ में बताया गया है कि एपीआई कॉल को एक साथ कैसे बैच बनाकर प्रोसेस करना है. इससे, क्लाइंट को बनाए जाने वाले एचटीटीपी कनेक्शन की संख्या कम होगी.

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

खास जानकारी

आपका क्लाइंट हर एचटीटीपी कनेक्शन से, एक तय ओवरहेड बनाता है. Manufacturer Center API के साथ एक साथ कई अनुरोध करने की सुविधा उपलब्ध है. इससे आपका क्लाइंट एक ही एचटीटीपी अनुरोध में कई एपीआई कॉल कर सकता है.

उन स्थितियों के उदाहरण जहां आपको एक साथ कई अनुरोध भेजने की सुविधा का इस्तेमाल करना चाहिए:

    • बहुत ज़्यादा प्रॉडक्ट अपलोड किए जा रहे हैं.

    • कई प्रॉडक्ट मिटाए जा रहे हैं.

    • ज़्यादा संख्या में प्रॉडक्ट फ़ेच किए जा रहे हैं.

हर मामले में, हर कॉल को अलग-अलग भेजने के बजाय, उन्हें एक ही एचटीटीपी अनुरोध में एक साथ ग्रुप किया जा सकता है. सभी अनुरोध एक ही Google API पर भेजे जाने चाहिए.

एक बार में ज़्यादा से ज़्यादा 1,000 कॉल किए जा सकते हैं. अगर आपको इससे ज़्यादा कॉल करने हैं, तो एक साथ कई अनुरोध करें.

ध्यान दें: Manufacturer Center API के लिए बैच सिस्टम, OData बैच प्रोसेसिंग सिस्टम जैसे ही सिंटैक्स का इस्तेमाल करता है. हालांकि, दोनों के सिमेंटिक अलग-अलग होते हैं.

बैच की जानकारी

एक साथ कई अनुरोध भेजने के अनुरोध में, एक ही एचटीटीपी अनुरोध में कई एपीआई कॉल शामिल होते हैं. यह अनुरोध एपीआई डिस्कवरी दस्तावेज़ में दिए गए batchPath पर भेजा जा सकता है. डिफ़ॉल्ट पाथ /batch/api_name/api_version है. इस सेक्शन में बैच सिंटैक्स के बारे में पूरी जानकारी दी गई है. बाद में, इसका एक उदाहरण दिया गया है.

ध्यान दें: बैच में भेजे गए n अनुरोधों का एक सेट, इस्तेमाल करने की आपकी सीमा में n अनुरोधों के तौर पर गिना जाता है, न कि एक अनुरोध के तौर पर. प्रोसेस करने से पहले, एक साथ कई अनुरोधों को अलग-अलग अनुरोधों में बांट दिया जाता है.

बैच अनुरोध का फ़ॉर्मैट

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

हर हिस्से अपने Content-Type: application/http एचटीटीपी हेडर से शुरू होता है. इसमें एक वैकल्पिक Content-ID हेडर भी हो सकता है. हालांकि, पार्ट हेडर सिर्फ़ हिस्से की शुरुआत को मार्क करने के लिए होते हैं; वे नेस्ट किए गए अनुरोध से अलग होते हैं. जब सर्वर बैच अनुरोध को अलग-अलग अनुरोधों में खोलता है, तो पार्ट हेडर को नज़रअंदाज़ कर दिया जाता है.

हर हिस्से का मुख्य हिस्सा अपने-आप में एक एचटीटीपी अनुरोध होता है. इसका अपना वर्ब, यूआरएल, हेडर, और मुख्य हिस्सा होता है. एचटीटीपी अनुरोध में सिर्फ़ यूआरएल का पाथ वाला हिस्सा शामिल होना चाहिए. एक साथ कई अनुरोधों में पूरे यूआरएल की अनुमति नहीं है.

Content-Type जैसे Content- हेडर को छोड़कर, आउटर बैच अनुरोध के एचटीटीपी हेडर, बैच में हर अनुरोध पर लागू होते हैं. अगर किसी एचटीटीपी हेडर को आउटर अनुरोध और व्यक्तिगत कॉल, दोनों में सेट किया जाता है, तो आउटर बैच रिक्वेस्ट हेडर की वैल्यू की जगह व्यक्तिगत कॉल हेडर की वैल्यू लागू हो जाएगी. किसी एक कॉल के हेडर सिर्फ़ उस कॉल पर लागू होते हैं.

उदाहरण के लिए, अगर आप किसी खास कॉल के लिए ऑथराइज़ेशन हेडर देते हैं, तो वह हेडर सिर्फ़ उस कॉल पर लागू होता है. अगर आप बाहरी अनुरोध के लिए ऑथराइज़ेशन हेडर देते हैं, तो वह हेडर सभी कॉल पर लागू होता है. ऐसा तब तक होता है, जब तक कि वे अपने ऑथराइज़ेशन हेडर से इसे ओवरराइड नहीं कर देते.

जब सर्वर को बैच किया गया अनुरोध मिलता है, तो वह हर हिस्से पर बाहरी अनुरोध के क्वेरी पैरामीटर और हेडर (जैसा उचित हो) लागू करता है और फिर हर हिस्से को एक अलग एचटीटीपी अनुरोध की तरह मानता है.

बैच में किए गए अनुरोध का जवाब

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

अनुरोध के हिस्सों की तरह, जवाब के हर हिस्से में पूरा एचटीटीपी रिस्पॉन्स होता है. इसमें स्टेटस कोड, हेडर, और मुख्य हिस्सा शामिल होता है. अनुरोध के हिस्सों की तरह, रिस्पॉन्स वाले हर हिस्से से पहले एक Content-Type हेडर होता है. यह हेडर, हिस्से की शुरुआत के बारे में बताता है.

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

ध्यान दें: सर्वर किसी भी क्रम में आपको कॉल कर सकता है. उनके एक्ज़ीक्यूट होने के क्रम में उनकी गिनती न करें जिस क्रम में आपने उन्हें बताया है. अगर आपको यह पक्का करना है कि दिए गए ऑर्डर में दो कॉल हों, तो उन्हें एक ही अनुरोध में नहीं भेजा जा सकता. इसके बजाय, पहला अनुरोध खुद ही भेजें. इसके बाद, दूसरा कॉल भेजने से पहले, पहले वाले कॉल के जवाब का इंतज़ार करें.

उदाहरण

नीचे दिए गए उदाहरण में, Manufacturer Center API की मदद से बैच में अनुरोध भेजने का तरीका दिखाया गया है.

बैच अनुरोध का उदाहरण


POST https://manufacturers.googleapis.com/batch
Authorization: Bearer your_auth_token
Content-Type: multipart/mixed; boundary=--batch_item

--batch_item
Content-Type: application/http
Content-ID: 

PUT /v1/accounts/account_id/products/targetCountry:contentLanguage:productId
Content-Type: application/json

{
   "gtin": "gtin",
   "product_name": "product_name",
   "description": "description",
   "image_link": {
       "image_url": "image_url"
   }
}
--batch_item
Content-Type: application/http
Content-ID: 

GET /v1/accounts/account_id/products/targetCountry:contentLanguage:productId
--batch_item
Content-Type: application/http
Content-ID: 

DELETE /v1/accounts/account_id/products/targetCountry:contentLanguage:productId
--batch_item--

बैच रिस्पॉन्स का उदाहरण

यह पिछले सेक्शन में उदाहरण के तौर पर दिए गए अनुरोध का जवाब है.



--batch_OycPgXWaQD5f20sVgri2ETiygT65fMaa
Content-Type: application/http
Content-ID: 

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{}

--batch_OycPgXWaQD5f20sVgri2ETiygT65fMaa
Content-Type: application/http
Content-ID: 

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{
  "parent": "accounts/account_id",
  "name": "targetCountry:contentLanguage:productId",
  "targetCountry": "targetCountry",
  "contentLanguage": "contentLanguage",
  "productId": "productId"
}

--batch_OycPgXWaQD5f20sVgri2ETiygT65fMaa
Content-Type: application/http
Content-ID: 

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{}

--batch_OycPgXWaQD5f20sVgri2ETiygT65fMaa--

ज़रूरी शर्तें

Manufacturer Center खाता

बैच का उदाहरण

यह कोड बताता है कि Java का इस्तेमाल करके, प्रॉडक्ट के अपडेट को बैच में कैसे भेजा जाता है.

Java

String parent = "accounts/123456";
String newProductName = "US:en:product_id_1";

Image image = new Image();
image.setUrl("http://www.example.com/example.png");

Attributes attributes = new Attributes();
attributes.setGtin(ImmmutableList.of("1234567890"));
attributes.setImageLink(image);

// Creates a new BatchRequest object from the ManufacturerCenter object.
BatchRequest batch = manufacturerCenter.batch();

// JsonBatchCallback generic type is Empty to match the return type of update API.
JsonBatchCallback updateProductCallback =  new JsonBatchCallback() {
    public void onSuccess(Empty empty, HttpHeaders responseHeaders) {
        System.out.printf("Product updated successfully.\n");
    }

    public void onFailure(GoogleJsonError error, HttpHeaders responseHeaders)
            throws IOException {
        System.out.printf("Error updating product: %s.\n", error.getMessage());
    }
}

// Adds update product request to batch object.
manufacturerCenter.accounts().products().update(parent, newProductName, attributes)
    .queue(batch, updateProductCallback);

String getProductName = "US:en:product_id_2";

// JsonBatchCallback generic type is Product to match the return type of get API.
JsonBatchCallback getProductCallback =  new JsonBatchCallback() {
    public void onSuccess(Product product, HttpHeaders responseHeaders) {
        System.out.printf("Found product: %s.\n", product.getName());
    }

    public void onFailure(GoogleJsonError error, HttpHeaders responseHeaders)
            throws IOException {
        System.out.printf("Error retrieving product: %s.\n", error.getMessage());
    }
}

// Adds get product request to batch object.
manufacturerCenter.accounts().products().get(parent, getProductName)
    .queue(batch, getProductCallback);

// Sends batch request to Manufacturer Center API.
batch.execute();