کدهای وضعیت زیر را می توان در پاسخ های 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 در مقابل غیرفعال
در زیر یک آزمون تورنسل است که ممکن است به شما کمک کند بین FAILED_PRECONDITION
، ABORTED
، و UNAVAILABLE
تصمیم بگیرید:
- اگر مشتری می تواند فقط تماس ناموفق را دوباره امتحان کند، از
UNAVAILABLE
استفاده کنید. - اگر مشتری باید در سطح بالاتری دوباره امتحان کند، از
ABORTED
استفاده کنید، مانند زمانی که یک تست و تنظیم مشخص شده توسط مشتری با شکست مواجه میشود که نشان میدهد مشتری باید دنباله خواندن-اصلاح-نوشتن را مجدداً راهاندازی کند. - اگر سرویس گیرنده نباید تا زمانی که وضعیت سیستم به صراحت ثابت نشده است، دوباره امتحان نکند، از
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 قبل ازstart_date_restrict
است. - اگر مقدار به دلیل وضعیت سیستم نامعتبر است، اما مقدار
OUT_OF_RANGE
نیست، ازFAILED_PRECONDITION
استفاده کنید.