गड़बड़ी के जवाब

गड़बड़ी के स्टैंडर्ड जवाब

अगर Tag Manager API का अनुरोध पूरा होता है, एपीआई, एपीआई के साथ एक 200 एचटीटीपी स्टेटस कोड दिखाता है जवाब के मुख्य भाग में डेटा का अनुरोध किया है.

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

400 invalidParameter

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "accessNotConfigured",
    "message": "Access Not Configured. Please use Google Developers Console to activate the API for your project.",
   }
  ],
  "code": 403,
  "message": "Access Not Configured. Please use Google Developers Console to activate the API for your project."
 }
}

ध्यान दें: जानकारी किसी भी समय बदल सकती है इसलिए ऐप्लिकेशन को असल जानकारी वाले टेक्स्ट पर निर्भर नहीं होना चाहिए.

एक्स्पोनेंशियल बैकऑफ़ लागू करना

एक्सपोनेन्शियल बैकऑफ़ यह क्लाइंट की वह प्रोसेस है जो समय-समय पर पूरे न हो पाने वाले अनुरोध को फिर से प्रोसेस करती है समय की बढ़ोतरी होती रहती है. यह गड़बड़ी को ठीक करने के लिए एक मानक रणनीति है इस्तेमाल करने की अनुमति देता है. Tag Manager API को वह उम्मीद जो पूरे न हो पाने वाले अनुरोधों के लिए फिर से कोशिश करने का विकल्प चुनने वाले क्लाइंट इसलिए, एक्सपोनेन्शियल बैकऑफ़ का इस्तेमाल करें. "ज़रूरी" होने के अलावा, घातांकीय बैकऑफ़ का उपयोग करने से बैंडविड्थ उपयोग की क्षमता बढ़ जाती है, यह विकल्प, सफल होने के लिए ज़रूरी अनुरोधों की संख्या कम कर देता है रिस्पॉन्स के साथ-साथ, एक साथ कई अनुरोधों की संख्या बढ़ाता है का इस्तेमाल करें.

सिंपल एक्स्पोनेंशियल बैकऑफ़ लागू करने का तरीका यहां दिया गया है.

  1. एपीआई को अनुरोध भेजें.
  2. गड़बड़ी वाला ऐसा जवाब पाएं जिसमें गड़बड़ी का कोड हो, जिसका फिर से इस्तेमाल किया जा सके.
  3. 1 सेकंड + random_number_milliseconds सेकंड इंतज़ार करें.
  4. फिर से अनुरोध करें.
  5. गड़बड़ी का ऐसा जवाब पाएं जिसमें गड़बड़ी का कोड हो, जिसका फिर से इस्तेमाल किया जा सके.
  6. 2 सेकंड + random_number_milliseconds सेकंड इंतज़ार करें.
  7. फिर से अनुरोध करें.
  8. गड़बड़ी का ऐसा जवाब पाएं जिसमें गड़बड़ी का कोड हो, जिसका फिर से इस्तेमाल किया जा सके.
  9. चार सेकंड + random_number_milliseconds सेकंड इंतज़ार करें.
  10. फिर से अनुरोध करें.
  11. गड़बड़ी वाला ऐसा जवाब पाएं जिसमें गड़बड़ी का कोड हो, जिसका फिर से इस्तेमाल किया जा सके.
  12. आठ सेकंड + random_number_milliseconds सेकंड इंतज़ार करें.
  13. फिर से अनुरोध करें.
  14. गड़बड़ी वाला ऐसा जवाब पाएं जिसमें गड़बड़ी का कोड हो, जिसका फिर से इस्तेमाल किया जा सके.
  15. 16 सेकंड + random_number_milliseconds सेकंड इंतज़ार करें.
  16. फिर से अनुरोध करें.
  17. अगर आपको अब भी गड़बड़ी का मैसेज मिलता है, तो गड़बड़ी को रोकें और उसकी जानकारी लॉग करें.

ऊपर दिए गए फ़्लो में, random_number_milliseconds एक रैंडम है मिलीसेकंड की संख्या 1,000 या उससे कम होनी चाहिए. यह ज़रूरी है का इस्तेमाल करें. हर इंतज़ार के बाद, random_number_milliseconds को फिर से तय करना होगा.

ध्यान दें: इंतज़ार का समय हमेशा होता है (2 ^ n) + random_number_milliseconds, जहां n शुरुआत में तय किया गया पूर्णांक है के तौर पर डालना होगा. हर बार दोहराए जाने वाले वैरिएबल n में 1 की बढ़ोतरी की जाती है (हर अनुरोध).

n के 5 होने पर एल्गोरिदम खत्म होने के लिए सेट किया गया है. यह छत है सिर्फ़ ऐसी जगह पर रखना जहां क्लाइंट फिर से लगातार कोशिश न कर सकें, और इस तरह, अनुरोध करने में करीब 32 सेकंड की देरी होती है उसे "ठीक नहीं की जा सकने वाली गड़बड़ी" माना जाता है.

नीचे दिया गया Python कोड, ऊपर दिए गए तरीकों को लागू करता है ऐसी गड़बड़ियों को ठीक करने का फ़्लो जो makeRequest.

import random
import time
from apiclient.errors import HttpError

def makeRequestWithExponentialBackoff(tagmanager):
  """Wrapper to request Google Tag Manager data with exponential backoff.

  The makeRequest method accepts the tagmanager service object, makes API
  requests and returns the response. If any error occurs, the makeRequest
  method is retried using exponential backoff.

  Args:
    tagmanager: The tagmanager service object

  Returns:
    The API response from the makeRequest method.
  """
  for n in range(0, 5):
    try:
      return makeRequest(tagmanager)

    except HttpError, error:
      if error.resp.reason in ['userRateLimitExceeded', 'quotaExceeded']:
        time.sleep((2 ** n) + random.random())

  print "There has been an error, the request never succeeded."