इस पेज पर, उपयोगकर्ता की प्रोफ़ाइल मिटाने वाले एपीआई से मिलने वाली गड़बड़ियों की सूची दी गई है. साथ ही, 500 कोड वाली गड़बड़ियों को मैनेज करने और एक्सपोनेंशियल बैकऑफ़ लागू करने का तरीका भी बताया गया है.
गड़बड़ी के लिए स्टैंडर्ड जवाब
अगर User Deletion API का अनुरोध पूरा हो जाता है, तो एपीआई 200
स्टेटस कोड दिखाता है.
अगर किसी अनुरोध में गड़बड़ी होती है, तो एपीआई गड़बड़ी के टाइप के आधार पर, रिस्पॉन्स में एचटीटीपी स्टेटस कोड, स्टेटस, और वजह दिखाता है. इसके अलावा, जवाब के मुख्य हिस्से में इस बात की पूरी जानकारी होती है कि गड़बड़ी क्यों हुई. यहां गड़बड़ी के रिस्पॉन्स का एक उदाहरण दिया गया है:
{ "error": { "errors": [ { "domain": "global", "reason": "invalidParameter",
"message": "Invalid value '-1' for max-results. Value must be within the range:
[1, 1000]", "locationType": "parameter", "location": "max-results" } ], "code":
400, "message": "Invalid value '-1' for max-results. Value must be within the
range: [1, 1000]" } }
गड़बड़ी की टेबल
कोड | कारण | ब्यौरा | सुझाई गई कार्रवाई |
---|---|---|---|
400 | invalidParameter |
इससे पता चलता है कि अनुरोध पैरामीटर की वैल्यू अमान्य है. गड़बड़ी के जवाब में मौजूद locationType और location फ़ील्ड से पता चलता है कि कौनसी वैल्यू अमान्य थी. |
समस्या को ठीक किए बिना फिर से कोशिश न करें. आपको गड़बड़ी के रिस्पॉन्स में बताए गए पैरामीटर के लिए एक मान्य वैल्यू देनी होगी. |
400 | badRequest |
इससे पता चलता है कि क्वेरी अमान्य थी. उदाहरण के लिए, पैरंट आईडी मौजूद नहीं था या अनुरोध किए गए डाइमेंशन या मेट्रिक का कॉम्बिनेशन अमान्य था. | समस्या ठीक किए बिना, फिर से कोशिश न करें. एपीआई क्वेरी काम करे, इसके लिए आपको उसमें बदलाव करने होंगे. |
401 | invalidCredentials |
इससे पता चलता है कि पुष्टि करने वाला टोकन अमान्य है या उसकी समयसीमा खत्म हो गई है. | समस्या ठीक किए बिना, फिर से कोशिश न करें. आपको पुष्टि करने के लिए नया टोकन चाहिए. |
403 | insufficientPermissions |
इससे पता चलता है कि उपयोगकर्ता के पास क्वेरी में बताई गई इकाई के लिए ज़रूरी अनुमतियां नहीं हैं. | समस्या ठीक किए बिना, फिर से कोशिश न करें. किसी इकाई पर कार्रवाई करने के लिए, आपके पास ज़रूरी अनुमतियां होनी चाहिए. |
403 | dailyLimitExceeded |
इससे पता चलता है कि उपयोगकर्ता ने हर प्रोजेक्ट या हर व्यू (प्रोफ़ाइल) के लिए, हर दिन के कोटे से ज़्यादा अनुरोध किए हैं. | समस्या ठीक किए बिना, फिर से कोशिश न करें. आपने अपना रोज़ का कोटा इस्तेमाल कर लिया है. एपीआई की सीमाएं और कोटा देखें. |
403 | userRateLimitExceeded |
इससे पता चलता है कि हर उपयोगकर्ता के लिए हर 100 सेकंड में की जाने वाली क्वेरी की सीमा पार हो गई है. Google API Console में सेट की गई डिफ़ॉल्ट वैल्यू, हर उपयोगकर्ता के लिए हर 100 सेकंड में 100 क्वेरी होती है. Google API कंसोल में इस सीमा को ज़्यादा से ज़्यादा 1,000 तक बढ़ाया जा सकता है. | एक्सपोनेंशियल बैक-ऑफ़ का इस्तेमाल करके फिर से कोशिश करें. आपको अनुरोध भेजने की दर को धीमा करना होगा. |
403 | rateLimitExceeded |
इससे पता चलता है कि प्रोजेक्ट की हर 100 सेकंड में की जाने वाली क्वेरी की दर की सीमाएं पार हो गई हैं. | एक्सपोनेंशियल बैक-ऑफ़ का इस्तेमाल करके फिर से कोशिश करें. आपको अनुरोध भेजने की दर को धीमा करना होगा. |
403 | quotaExceeded |
इससे पता चलता है कि Core Reporting API में, हर व्यू (प्रोफ़ाइल) के लिए एक साथ 10 अनुरोध पूरे हो चुके हैं. | एक्सपोनेंशियल बैक-ऑफ़ का इस्तेमाल करके फिर से कोशिश करें. आपको इस व्यू (प्रोफ़ाइल) के लिए, कम से कम एक अनुरोध पूरा होने का इंतज़ार करना होगा. |
500 | internalServerError |
सर्वर में ऐसी गड़बड़ी हुई जिसकी उम्मीद नहीं थी. | इस क्वेरी को एक से ज़्यादा बार फिर से न करें. |
503 | backendError |
सर्वर ने गड़बड़ी का मैसेज दिया. | इस क्वेरी को एक से ज़्यादा बार दोहराएं. |
500 या 503 कोड वाले रिस्पॉन्स मैनेज करना
ज़्यादा लोड या बड़े और जटिल अनुरोधों के दौरान, 500
या 503
गड़बड़ी हो सकती है. ज़्यादा अनुरोधों के लिए, कम समयावधि के डेटा का अनुरोध करें. साथ ही, एक्सपोनेन्शियल बैकऑफ़ लागू करें. इन गड़बड़ियों की फ़्रीक्वेंसी, व्यू (प्रोफ़ाइल) और उससे जुड़े रिपोर्टिंग डेटा की संख्या पर निर्भर हो सकती है. किसी एक व्यू (प्रोफ़ाइल) के लिए 500
या 503
गड़बड़ी वाली क्वेरी, किसी दूसरे व्यू (प्रोफ़ाइल) के लिए उसी क्वेरी में गड़बड़ी नहीं दिखाएगी.
एक्सपोनेंशियल बैकऑफ़ लागू करना
एक्सपोनेंशियल बैकऑफ़, एक ऐसी प्रोसेस है जिसमें क्लाइंट, समय-समय पर उस अनुरोध को फिर से कोशिश करता है जो पूरा नहीं हो सका था. यह नेटवर्क ऐप्लिकेशन के लिए, गड़बड़ी को मैनेज करने का स्टैंडर्ड तरीका है. User Deletion API को इस उम्मीद के साथ डिज़ाइन किया गया है कि जिन क्लाइंट को अनुरोध पूरा न होने पर फिर से कोशिश करनी है वे एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करेंगे. एक्सपोनेंशियल बैकऑफ़ का इस्तेमाल करना "ज़रूरी" है. साथ ही, इससे बैंडविड्थ के इस्तेमाल की क्षमता बढ़ती है, जवाब पाने के लिए ज़रूरी अनुरोधों की संख्या कम होती है, और एक साथ कई अनुरोधों के लिए अनुरोधों की संख्या बढ़ती है.
एक्सपोनेंशियल बैकऑफ़ लागू करने का तरीका यहां बताया गया है:
- एपीआई से अनुरोध करें.
- आपको गड़बड़ी का ऐसा रिस्पॉन्स मिले जिसमें गड़बड़ी का कोड मौजूद हो और जिसे दोबारा आज़माया जा सके.
- 1 सेकंड +
random_number_milliseconds
सेकंड इंतज़ार करें. - अनुरोध दोबारा करें.
- आपको गड़बड़ी का ऐसा रिस्पॉन्स मिले जिसमें गड़बड़ी का कोड मौजूद हो और जिसे दोबारा आज़माया जा सके.
- 2 सेकंड +
random_number_milliseconds
सेकंड इंतज़ार करें. - फिर से अनुरोध करें.
- आपको गड़बड़ी का ऐसा रिस्पॉन्स मिले जिसमें गड़बड़ी का कोड मौजूद हो और जिसे दोबारा आज़माया जा सके.
- 4 सेकंड +
random_number_milliseconds
सेकंड इंतज़ार करें. - फिर से अनुरोध करें.
- गड़बड़ी का ऐसा जवाब पाएं जिसमें फिर से कोशिश करने लायक गड़बड़ी का कोड हो.
- 8 सेकंड +
random_number_milliseconds
सेकंड इंतज़ार करें. - अनुरोध दोबारा करें.
- आपको गड़बड़ी का ऐसा रिस्पॉन्स मिले जिसमें गड़बड़ी का कोड मौजूद हो और जिसे दोबारा आज़माया जा सके.
- 16 सेकंड +
random_number_milliseconds
सेकंड इंतज़ार करें. - अनुरोध दोबारा करें.
- अगर आपको अब भी गड़बड़ी का मैसेज मिलता है, तो गड़बड़ी को रोकें और उसकी जानकारी लॉग करें.
पिछले फ़्लो में, random_number_milliseconds
एक रैंडम संख्या है, जो 1000 से कम या उसके बराबर होती है. कुछ एक साथ लागू होने वाली कुछ गड़बड़ियों से बचने के लिए यह ज़रूरी है. random_number_milliseconds
को हर बार इंतज़ार करने के बाद फिर से तय करना होगा.
एल्गोरिदम, n के 5 होने पर बंद हो जाता है. यह सीमा सिर्फ़ इसलिए तय की गई है, ताकि क्लाइंट बार-बार कोशिश न करें. इससे, किसी अनुरोध को "ठीक नहीं की जा सकने वाली गड़बड़ी" माना जाने से पहले, करीब 32 सेकंड की कुल देरी होती है.
नीचे दिया गया Python कोड, makeRequest
नाम के तरीके में होने वाली गड़बड़ियों से उबरने के लिए, ऊपर दिए गए फ़्लो को लागू करने का उदाहरण है.
import random
import time
from apiclient.errors import HttpError
def makeRequestWithExponentialBackoff(analytics):
"""Wrapper to request Google Analytics data with exponential backoff.
The makeRequest method accepts the analytics service object, makes API
requests and returns the response. If any error occurs, the makeRequest
method is retried using exponential backoff.
Args:
analytics: The analytics service object
Returns:
The API response from the makeRequest method.
"""
for n in range(0, 5):
try:
return makeRequest(analytics)
except HttpError, error:
if error.resp.reason in ['userRateLimitExceeded', 'quotaExceeded',
'internalServerError', 'backendError']:
time.sleep((2 ** n) + random.random())
else:
break
print "There has been an error, the request never succeeded."