כשבקשה ל-Firestore במצב Datastore מצליחה, ה-API מחזיר קוד סטטוס 200 OK של HTTP יחד עם הנתונים המבוקשים בגוף התגובה.
אם בקשה נכשלת, Datastore API מחזיר קוד סטטוס HTTP 4xx או 5xx שמזהה באופן כללי את הכשל, וגם תגובה שמספקת מידע ספציפי יותר על השגיאות שגרמו לכשל.
בהמשך הדף מוסבר על מבנה השגיאה, מפורטים קודי שגיאה ספציפיים ומומלץ איך לטפל בהם.
זוהי המבנה של תגובת שגיאה לבקשת JSON:
{
"error": {
"code": "integer",
"message": "string",
"status": "string"
}
}
אובייקט התגובה מכיל שדה יחיד error שהערך שלו מכיל את הרכיבים הבאים:
| רכיב | תיאור |
|---|---|
code |
קוד סטטוס של HTTP שמזהה באופן כללי את כשל הבקשה. |
message |
מידע ספציפי על כשל בבקשה. |
status |
קוד השגיאה הקנוני (google.rpc.Code) עבור Google APIs. קודי השגיאה שמוחזרים על ידי Datastore API מפורטים בקודי שגיאה. |
דוגמה לתגובה לשגיאה בבקשת JSON:
{
"error": {
"code": 400,
"message": "Key path is incomplete: [Person: null]",
"status": "INVALID_ARGUMENT"
}
}
אם בקשה שנוצרה עם סוג תוכן application/x-protobuf מובילה לשגיאה, היא תחזיר הודעת google.rpc.Status שעברה סריאליזציה כמטען ייעודי.
קודי שגיאה
הדרך המומלצת לסווג שגיאות היא לבדוק את הערך של קוד השגיאה הקנוני (google.rpc.Code). בשגיאות JSON, הקוד הזה מופיע בשדה status. בשגיאות application/x-protobuf, הערך מופיע בשדה code.
| קוד שגיאה קנוני | תיאור | מה מומלץ לעשות? |
|---|---|---|
ABORTED |
מציין שהבקשה התנגשה עם בקשה אחרת. | אם מדובר בפעולת commit לא טרנזקציונלית: מנסים לשלוח מחדש את הבקשה או משנים את מבנה הישויות כדי לצמצם את התחרות. אם מדובר בבקשות שמהוות חלק מפעולת commit טרנזקציונלית: מנסים לשלוח מחדש את כל הטרנזקציה או משנים את מבנה הישויות כדי לצמצם את התחרות. |
ALREADY_EXISTS |
מציין שהבקשה ניסתה להוסיף ישות שכבר קיימת. | אל תנסו שוב בלי לפתור את הבעיה. |
DEADLINE_EXCEEDED |
היה חריגה מהמועד האחרון בשרת. | צריך לנסות שוב באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff). |
FAILED_PRECONDITION |
מציין שאחד מהתנאים המוקדמים של הבקשה לא התקיים. בשדה ההודעה בתגובת השגיאה מופיע מידע על התנאי המוקדם שנכשל. סיבה אפשרית אחת היא הפעלת שאילתה שנדרש לה אינדקס שעדיין לא הוגדר. | אל תנסו שוב בלי לפתור את הבעיה. |
INTERNAL |
השרת החזיר שגיאה. | אין לנסות לשלוח את הבקשה הזו יותר מפעם אחת. |
INVALID_ARGUMENT |
מציין שלפרמטר של בקשה יש ערך לא תקין. בשדה ההודעה בתגובת השגיאה מפורט הערך הלא תקין. | אל תנסו שוב בלי לפתור את הבעיה. |
NOT_FOUND |
מציין שהבקשה ניסתה לעדכן ישות שלא קיימת. | אל תנסו שוב בלי לפתור את הבעיה. |
PERMISSION_DENIED |
מציין שהמשתמש לא מורשה להגיש את הבקשה. | אל תנסו שוב בלי לפתור את הבעיה. |
RESOURCE_EXHAUSTED |
מציין שהפרויקט חרג מהמכסה שלו או מהקיבולת של האזור או של מספר האזורים. | מוודאים שלא חרגתם מהמכסה של הפרויקט. אם חרגתם ממכסת הפרויקט, אל תנסו שוב בלי לפתור את הבעיה. אחרת, נסו שוב עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff). |
UNAUTHENTICATED |
מציין שבבקשה לא היו פרטי כניסה תקינים לאימות. | אל תנסו שוב בלי לפתור את הבעיה. |
UNAVAILABLE |
השרת החזיר שגיאה. | צריך לנסות שוב באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff). |