狀態回應代碼

下列狀態碼可在 gRPC 回應中傳回,適用於本網站記錄的所有 gRPC 版本。

代碼 狀態 附註
0 OK 返回 Success
1 CANCELLED 作業已取消 (通常由呼叫端取消)。
2 UNKNOWN 舉例來說,當從其他位址空間收到的「Status」值屬於這個位址空間中不明的錯誤空間時,就可能傳回此錯誤;由 API 發出但未傳回充分錯誤資訊的錯誤,也可能會轉換為此錯誤。
3 INVALID_ARGUMENT 用戶端指定了無效的引數。
4 DEADLINE_EXCEEDED 在作業完成前已過期。針對會變更系統狀態的作業,即使作業順利完成也有可能會傳回這個錯誤,舉例來說,雖然伺服器成功提供回應,但因為延遲時間過長而導致超過期限。
5 NOT_FOUND 找不到某些要求的實體。
6 ALREADY_EXISTS 用戶端嘗試建立的實體已存在。
7 PERMISSION_DENIED 呼叫端沒有執行指定作業的權限。對於因耗用某些資源所導致的拒絕情形,請改用 RESOURCE_EXHAUSTEDPERMISSION_DENIED如果無法識別呼叫端,請勿使用 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_RANGEFAILED_PRECONDITION 這兩個代碼都適用,建議您優先使用前者。同樣地,請盡量使用 NOT_FOUNDALREADY_EXISTS 而非 FAILED_PRECONDITION

FAILED_PRECONDITION、ABORTED 與 UNAVAILABLE 的比較

以下是判斷準則,可協助您決定要使用 FAILED_PRECONDITIONABORTED 還是 UNAVAILABLE

  • 如果用戶端只能重試失敗的呼叫,請使用 UNAVAILABLE
  • 如果用戶端應在較高層級重試 (例如當用戶端指定的「test-and-set」失敗時,表示用戶端應重新開始「read-modify-write」序列),請使用 ABORTED
  • 如果用戶端不應在系統狀態明確修正完畢之前重試,請使用 FAILED_PRECONDITION。舉例來說,如果「rmdir」因目錄非空白而失敗,則最好傳回 FAILED_PRECONDITION,因為用戶端必須等到目錄中的檔案都刪除之後才重試。

INVALID_ARGUMENT、FAILED_PRECONDITION 與 OUT_OF_RANGE 的比較

以下是判斷準則,可協助您決定要使用 INVALID_ARGUMENTFAILED_PRECONDITION 還是 OUT_OF_RANGE

  • 如果引數有問題,則無論系統狀態為何,一律使用 INVALID_ARGUMENT 例如:網址格式錯誤
  • 如果值因系統狀態而超出範圍,請使用 OUT_OF_RANGE。例如,start_date 早於 start_date_restrict
  • 如果值因系統狀態而無效,但不是 OUT_OF_RANGE 值,請使用 FAILED_PRECONDITION