Google Analytics API अनुरोधों की बैच बनाना

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

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

खास जानकारी

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

उदाहरण

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

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

POST /batch/analytics/v3 HTTP/1.1
Host: www.googleapis.com
Content-length: 731
Content-type: multipart/mixed; boundary=batch_0123456789
Authorization: Bearer ya29.5gFZooleNoSpGqYOOF0eFciUGz1x26k9GagZoW7HJCogWlCoNOotxlZPo7bDbwo1ykDq
--batch_0123456789
Content-Type: application/http
Content-ID: 
Content-Transfer-Encoding: binary


POST https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1/customDimensions
Content-Type: application/json
Content-Length: 68


{
 "name": "Campaign Group",
 "scope": "SESSION",
 "active": true
}

--batch_0123456789
Content-Type: application/http
Content-ID: 
Content-Transfer-Encoding: binary


POST https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1/customDimensions
Content-Type: application/json
Content-Length: 67


{
 "name": "Campaign Type",
 "scope": "SESSION",
 "active": true
}

--batch_0123456789--

बैच में दिए गए जवाब का उदाहरण

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

HTTP/1.1 200 OK
Content-length: 1876
X-xss-protection: 1; mode=block
X-content-type-options: nosniff
Expires: Wed, 02 Sep 2015 21:36:35 GMT
Vary: Origin,X-Origin
Server: GSE
Cache-control: private, max-age=0
Date: Wed, 02 Sep 2015 21:36:35 GMT
X-frame-options: SAMEORIGIN
Content-type: multipart/mixed; boundary=batch_KDU-RkhYyNI_AAkR9Jc5Z_Q
--batch_KDU-RkhYyNI_AAkR9Jc5Z_Q
Content-Type: application/http
Content-ID: 

HTTP/1.1 200 OK
ETag: "o-85COrcxoYkAw5itMLG4AKNpMY/L-Y_3uM9BpST8Sea-SJDRQ7N7vE"
Content-Type: application/json; charset=UTF-8
Date: Wed, 02 Sep 2015 21:36:35 GMT
Expires: Wed, 02 Sep 2015 21:36:35 GMT
Cache-Control: private, max-age=0
Content-Length: 548

{"kind":"analytics#customDimension","id":"ga:dimension18","accountId":"XXXXXX","webPropertyId":"UA-XXXXXX-1","name":"Campaign Group","index":18,"scope":"SESSION","active":true,"created":"2015-09-02T21:36:34.143Z","updated":"2015-09-02T21:36:34.143Z","selfLink":"https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1/customDimensions/ga:dimension18","parentLink":{"type":"analytics#webproperty","href":"https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1"}}
--batch_KDU-RkhYyNI_AAkR9Jc5Z_Q
Content-Type: application/http
Content-ID: 

HTTP/1.1 200 OK
ETag: "o-85COrcxoYkAw5itMLG4AKNpMY/VN-21fLS1T0Qko3pHEB5fi8vYJ8"
Content-Type: application/json; charset=UTF-8
Date: Wed, 02 Sep 2015 21:36:35 GMT
Expires: Wed, 02 Sep 2015 21:36:35 GMT
Cache-Control: private, max-age=0
Content-Length: 547

{"kind":"analytics#customDimension","id":"ga:dimension19","accountId":"XXXXXX","webPropertyId":"UA-XXXXXX-1","name":"Campaign Type","index":19,"scope":"SESSION","active":true,"created":"2015-09-02T21:36:35.099Z","updated":"2015-09-02T21:36:35.099Z","selfLink":"https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1/customDimensions/ga:dimension19","parentLink":{"type":"analytics#webproperty","href":"https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1"}}
--batch_KDU-RkhYyNI_AAkR9Jc5Z_Q--

क्लाइंट लाइब्रेरी

अपनी भाषा में बैचिंग की सुविधा लागू करने का तरीका जानने के लिए, क्लाइंट लाइब्रेरी की इन गाइड का इस्तेमाल करें:

बैचिंग और Google Analytics कोटा

एक साथ कई अनुरोध करने से, कई एचटीटीपी अनुरोध बनाए जा सकते हैं. हालांकि, बैच अनुरोध में Google Analytics एपीआई के हर अनुरोध को हर दिन प्रोजेक्ट के कोटा में गिना जाएगा. डिफ़ॉल्ट रूप से, एक प्रोजेक्ट हर दिन 50,000 अनुरोध कर सकता है. एक साथ कई अनुरोध भेजने का विकल्प चुनने पर, इस कोटा से कम रहने का कोई फ़ायदा नहीं होगा.

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

हर खाता आईडी की सीमा के लिए, 1.5 क्वेरी प्रति सेकंड (क्यूपीएस) ही Management API लिखने के अनुरोध और प्रॉविज़निंग एपीआई में लिखने के अनुरोध पर लागू होती है. इसलिए, हो सकता है कि लिखने के इन अनुरोधों के बैच बनाने से परफ़ॉर्मेंस में सुधार न हो.