קודי תגובה של סטטוס

קודי הסטטוס הבאים יכולים להופיע בתשובות של gRPC. ההנחיה הזו רלוונטית לכל הגרסאות של gRPC שמתועדות באתר הזה.

קוד סטטוס הערות
0 OK חזרה ב-Success
1 CANCELLED הפעולה בוטלה, בדרך כלל על ידי מבצע הקריאה החוזרת.
2 UNKNOWN לדוגמה, השגיאה הזו עשויה להופיע כשערך הסטטוס שהתקבל ממרחב כתובות אחר שייך למרחב שגיאות שלא ידוע במרחב הכתובות הזה. בנוסף, שגיאות שמתקבלות מממשקי API שלא מחזירים מספיק פרטי שגיאה עשויות להפוך לשגיאה הזו.
3 INVALID_ARGUMENT הלקוח ציין ארגומנט לא חוקי.
4 DEADLINE_EXCEEDED המועד האחרון פג לפני שהפעולה הושלמה. בפעולות שמחליפות את מצב המערכת, ייתכן שהשגיאה הזו תוחזר גם אם הפעולה הושלמה בהצלחה. לדוגמה, תגובה מוצלחת משרת שהתקבלה באיחור רב, כך שפג תוקף המועד האחרון.
5 NOT_FOUND חלק מהישויות המבוקשות לא נמצאו.
6 ALREADY_EXISTS הישות שהלקוח ניסה ליצור כבר קיימת.
7 PERMISSION_DENIED למתקשר אין הרשאה לבצע את הפעולה שצוינה. אין להשתמש ב-PERMISSION_DENIED לדחיות שנגרמות בגלל מיצוי של משאב כלשהו. במקום זאת, צריך להשתמש ב-RESOURCE_EXHAUSTED בשביל השגיאות האלה. אין להשתמש ב-PERMISSION_DENIED אם לא ניתן לזהות את מבצע הקריאה החוזרת (במקרים כאלה, צריך להשתמש ב-UNAUTHENTICATED במקום זאת). קבלת קוד השגיאה PERMISSION_DENIED לא מעידה על כך שהבקשה תקינה, שהישות המבוקשת קיימת או שהיא עומדת בתנאים מוקדמים אחרים.
8 RESOURCE_EXHAUSTED משאב כלשהו אזל, אולי מכסה לכל משתמש, או אולי אין יותר מקום פנוי בכל מערכת הקבצים.
9 FAILED_PRECONDITION הפעולה נדחתה כי המערכת לא במצב הנדרש לביצוע הפעולה. לדוגמה, הספרייה שרוצים למחוק לא ריקה או שפעולת rmdir חלה על ספרייה שאינה ספרייה.
10 ABORTED הפעולה בוטלה, בדרך כלל בגלל בעיה של בו-זמניות, כמו כשל בבדיקת מאסף או ביטול עסקה.
11 OUT_OF_RANGE נעשו ניסיונות לבצע את הפעולה מחוץ לטווח החוקי.
12 UNIMPLEMENTED הפעולה לא יושמה או לא נתמכת/מופעלת בשירות הזה.
13 INTERNAL שגיאות פנימיות. המשמעות היא שחלק מהקבועים שלא משתנים שמצופים במערכת הבסיסית הופרו. קוד השגיאה הזה מיועד לשגיאות חמורות.
14 UNAVAILABLE השירות הזה לא זמין כרגע. סביר להניח שמדובר במצב זמני שאפשר לתקן אם מנסים שוב עם זמן המתנה.
15 DATA_LOSS אובדן נתונים או פגיעה בנתונים שלא ניתן לשחזר.
16 UNAUTHENTICATED בבקשה לא צוינו פרטי כניסה תקינים לביצוע הפעולה.

לפעמים יכולים להיות כמה קודי שגיאה. השירותים צריכים להחזיר את קוד השגיאה הספציפי ביותר שרלוונטי. לדוגמה, אם שני הקודים רלוונטיים, עדיף להשתמש ב-OUT_OF_RANGE במקום ב-FAILED_PRECONDITION. באופן דומה, עדיף להשתמש ב-NOT_FOUND או ב-ALREADY_EXISTS במקום ב-FAILED_PRECONDITION.

FAILED_PRECONDITION לעומת ABORTED לעומת UNAVAILABLE

הנה מבחן פשוט שיעזור לכם להחליט בין FAILED_PRECONDITION,‏ ABORTED ו-UNAVAILABLE:

  • משתמשים ב-UNAVAILABLE אם הלקוח יכול לנסות שוב רק את הקריאה שנכשלה.
  • משתמשים ב-ABORTED אם הלקוח צריך לנסות שוב ברמה גבוהה יותר, למשל כשבדיקה של test-and-set שצוינה על ידי הלקוח נכשלת, מה שמציין שהלקוח צריך להפעיל מחדש רצף של קריאה, שינוי וכתיבה.
  • משתמשים ב-FAILED_PRECONDITION אם הלקוח לא צריך לנסות שוב עד שמצב המערכת מתוקן באופן מפורש. לדוגמה, אם הפקודה 'rmdir' נכשלת כי הספרייה לא ריקה, עדיף להחזיר את הערך FAILED_PRECONDITION כי הלקוח לא צריך לנסות שוב אלא אם הקבצים נמחקים מהספרייה.

INVALID_ARGUMENT לעומת FAILED_PRECONDITION לעומת OUT_OF_RANGE

הנה מבחן פשוט שיעזור לכם להחליט בין INVALID_ARGUMENT,‏ FAILED_PRECONDITION ו-OUT_OF_RANGE:

  • משתמשים ב-INVALID_ARGUMENT אם הארגומנטים בעייתיים ללא קשר למצב המערכת. לדוגמה: כתובת URL לא תקינה
  • משתמשים ב-OUT_OF_RANGE אם ערך נמצא מחוץ לטווח בגלל מצב המערכת. לדוגמה, תאריך ההתחלה הוא לפני start_date_restrict.
  • משתמשים ב-FAILED_PRECONDITION אם הערך לא חוקי בגלל מצב המערכת, אבל הוא לא ערך OUT_OF_RANGE.