תגובות שגיאה

תגובות לשגיאות רגילות

אם בקשת Tag Manager API מצליחה, ה-API מחזיר קוד סטטוס HTTP של 200 עם הנתונים המבוקשים בגוף התגובה.

אם מתרחשת שגיאה בבקשה, ה-API מחזיר בתגובה קוד מצב HTTP וסיבה בהתאם לסוג השגיאה. בנוסף, גוף התגובה מכיל תיאור מפורט של הגורם לשגיאה. דוגמה להודעת שגיאה:

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. שליחת בקשה ל-API.
  2. מקבלים תגובת שגיאה עם קוד שגיאה שאפשר לנסות שוב.
  3. יש להמתין שנייה אחת + random_number_milliseconds שניות.
  4. ניסיון חוזר של הבקשה.
  5. מקבלים תגובת שגיאה עם קוד שגיאה שאפשר לנסות שוב.
  6. יש להמתין 2 שניות + random_number_milliseconds שניות.
  7. ניסיון חוזר של הבקשה.
  8. מקבלים תגובת שגיאה עם קוד שגיאה שאפשר לנסות שוב.
  9. יש להמתין 4 שניות + random_number_milliseconds שניות.
  10. ניסיון חוזר של הבקשה.
  11. מקבלים תגובת שגיאה עם קוד שגיאה שאפשר לנסות שוב.
  12. יש להמתין 8 שניות + 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 הוא מספר שלם שגדל באופן מונוטוני שמוגדר בהתחלה כ-0. המשתנה 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."