שגיאות ופתרון בעיות

השגיאות שמוחזרות מ-Isochrones API הן בפורמט JSON הסטנדרטי של Google Cloud,‏ google.rpc.Status:

{
  "error": {
    "code": 400,
    "message": "Violation in GenerateIsochroneRequest.travel_duration: travel_duration must be at least 1 second and not exceed 3600 seconds (60 minutes) for DRIVE or TWO_WHEELER mode or 7200 seconds (120 minutes) for other modes",
    "status": "INVALID_ARGUMENT"
  }
}

כדי לטפל בשגיאות באופן פרוגרמטי, משתמשים בשדה status (או HTTP code). הטקסט של message מיועד למפתחים ועשוי להשתנות, אז אל תנתחו אותו.

כשעובדים עם Isochrones API, יכול להיות שתקבלו את קודי הסטטוס הנפוצים הבאים:

  • ‫400 INVALID_ARGUMENT: הבקשה מכילה פרמטרים לא תקינים או תחביר שגוי:
    • גבולות משך הזמן: ודאו שהערך של travelDuration הוא לפחות "1s", מסתיים ב-"s" (למשל "1800s") ולא חורג מהמגבלה של המצב: 3600s (60 דקות) ל-DRIVE ול-TWO_WHEELER, או 7200s (120 דקות) ל-WALK ול-BICYCLE. המערכת דוחה ערכים של אפס ("0s"), ערכים שליליים וערכים של פחות משנייה אחת (כמו "0.5s").
    • העדפת תנועה: ודאו שהערך של routingPreference לא מוגדר כ-TRAFFIC_AWARE כשהערך של travelMode הוא WALK או BICYCLE. אפשר להשתמש בתנועה בזמן אמת רק ב-DRIVE וב-TWO_WHEELER.
    • ערכי enum נדרשים: ודאו שציינתם את travelMode וגם את travelDirection (FROM או TO) ושהם לא מוגדרים כ-*_UNSPECIFIED.
    • קואורדינטות של נקודת המוצא (location): מגדירים את latitude (ב[-90, 90]) ואת longitude (ב[-180, 180]). אם משמיטים שדה, המערכת מתייחסת אליו כאל 0 בלי שגיאה: אם משמיטים את שניהם, מקבלים (0, 0), שנדחה. אם משמיטים רק את latitude, נקודת המוצא ממוקמת בקו המשווה. אם משמיטים רק את longitude, היא ממוקמת בקו האורך הראשי.
    • ‫פורמט מזהה המקום (place): ודאו שהערך place הוא מזהה מקום או שם משאב של places/{place_id} (לדוגמה, "places/ChIJIQBpAG2ahYAR_6128GcTUEo"), בלי קטעי נתיב נוספים, ושהוא מפנה למזהה מקום חוקי.
    • מסכת שדה (X-Goog-FieldMask): אם צוינה, הכותרת חייבת להפנות לנתיבי תגובה תקינים כמו isochrone,‏ isochrone.geoJson או *.
    • ‫Invalid API key (API_KEY_INVALID): מפתח API לא תקין או לא מזוהה ב-X-Goog-Api-Key או ב-?key= מחזיר את השגיאה 400 INVALID_ARGUMENT עם הסיבה API_KEY_INVALID.
  • ‫403 PERMISSION_DENIED: האימות או ההרשאה נכשלו:
    • לא צוינו בבקשה פרטי כניסה לאימות (אסימון X-Goog-Api-Key, ?key= או Authorization: Bearer).
    • ‫Isochrones API (isochrones.googleapis.com) לא מופעל בפרויקט שלכם ב-Google Cloud, או שהחיוב לא מופעל.
    • למפתח ה-API יש הגבלות על יעד ה-API, כתובת ה-IP או הגורם המפנה ב-HTTP שחוסמות בקשות אל isochrones.googleapis.com.
  • ‫404 NOT_FOUND: לא ניתן היה לפתור את נקודת המוצא או להצמיד אותה לרשת הכבישים:
    • לא ניתן היה לזהות את המיקום של place. צריך לוודא שמזהה המקום תקין ועדכני.
    • נקודת המוצא location או מרכז הכובד place רחוקים מדי ממקטע כביש שמתאים לאמצעי התחבורה, כלומר המרחק גדול מהמרחק המקסימלי להצמדה (כ-200 מטרים, או פחות מזה לאמצעי התחבורה WALK ו-BICYCLE). צריך להזיז את הקואורדינטה קרוב יותר לכביש ציבורי או להעביר קואורדינטות של כניסה לכביש במקום מזהה מקום של פארק גדול או של ציון דרך.
    • הקואורדינטה נמצאת באזור שאין בו נתוני כבישים (כמו אוקיינוס פתוח).
  • ‫429 RESOURCE_EXHAUSTED: הפרויקט חרג ממגבלת המכסה לדקה (ברירת המחדל היא 300 בקשות לדקה):

    {
      "error": {
        "code": 429,
        "message": "Quota exceeded for quota metric 'Requests' and limit 'Requests per minute' of service 'isochrones.googleapis.com'.",
        "status": "RESOURCE_EXHAUSTED"
      }
    }
    

    לווסת את קצב הבקשות של הלקוח ולנסות שוב תגובות 429 באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff) עם רעידות אקראיות.

  • ‫503 UNAVAILABLE: השירות לא זמין באופן זמני או שיש עומס יתר. מנסים שוב לשלוח את הבקשה באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff).

  • ‫500 INTERNAL: אירעה שגיאת שרת פנימית, כמו זמן קצוב לתפוגה בקצה העורפי. מנסים שוב לשלוח את הבקשה באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff).