Mã phản hồi trạng thái

Các mã trạng thái sau đây có thể được trả về trong phản hồi gRPC. Điều này áp dụng cho tất cả các phiên bản gRPC được ghi nhận trên trang web này.

Trạng thái Ghi chú
0 OK Trả về trên Success
1 CANCELLED Thao tác đã bị huỷ, thường là do phương thức gọi.
2 UNKNOWN Ví dụ: lỗi này có thể được trả về khi một giá trị Trạng thái nhận được từ một không gian địa chỉ khác thuộc về một không gian lỗi không xác định trong không gian địa chỉ này. Ngoài ra, các lỗi do API gây ra và không trả về đủ thông tin lỗi cũng có thể được chuyển đổi thành lỗi này.
3 INVALID_ARGUMENT Ứng dụng khách chỉ định đối số không hợp lệ.
4 DEADLINE_EXCEEDED Thời hạn đã hết trước khi thao tác hoàn tất. Đối với các thao tác thay đổi trạng thái của hệ thống, lỗi này có thể được trả về ngay cả khi thao tác đó hoàn tất thành công. Ví dụ: phản hồi thành công từ một máy chủ bị trì hoãn đủ lâu để thời hạn hết hạn.
5 NOT_FOUND Không tìm thấy một số thực thể được yêu cầu.
6 ALREADY_EXISTS Thực thể mà ứng dụng khách tìm cách tạo đã tồn tại.
7 PERMISSION_DENIED Phương thức gọi không có quyền thực thi thao tác đã chỉ định. Đừng sử dụng PERMISSION_DENIED cho các trường hợp từ chối do hết một số tài nguyên; hãy sử dụng RESOURCE_EXHAUSTED cho các lỗi đó. Không sử dụng PERMISSION_DENIED nếu không xác định được phương thức gọi (hãy sử dụng UNAUTHENTICATED cho các lỗi đó). Việc nhận được mã lỗi PERMISSION_DENIED không có nghĩa là yêu cầu hợp lệ hoặc thực thể được yêu cầu tồn tại hoặc đáp ứng các điều kiện tiên quyết khác.
8 RESOURCE_EXHAUSTED Một số tài nguyên đã hết, có thể là hạn mức trên mỗi người dùng hoặc có thể toàn bộ hệ thống tệp đã hết dung lượng.
9 FAILED_PRECONDITION Thao tác này bị từ chối vì hệ thống không ở trạng thái cần thiết để thực thi thao tác. Ví dụ: thư mục cần xoá không trống hoặc thao tác rmdir được áp dụng cho một thư mục không phải thư mục.
10 ABORTED Thao tác đã bị huỷ, thường là do vấn đề đồng thời như không kiểm tra được trình tự hoặc huỷ giao dịch.
11 OUT_OF_RANGE Thao tác đã được thực hiện ngoài phạm vi hợp lệ.
12 UNIMPLEMENTED Thao tác này không được triển khai hoặc không được hỗ trợ/bật trong dịch vụ này.
13 INTERNAL Lỗi nội bộ. Điều này có nghĩa là một số hằng số mà hệ thống cơ bản dự kiến đã bị phá vỡ. Mã lỗi này dành riêng cho các lỗi nghiêm trọng.
14 UNAVAILABLE Dịch vụ này hiện không dùng được. Đây rất có thể là một điều kiện tạm thời có thể được khắc phục nếu thử lại bằng thời gian đợi.
15 DATA_LOSS Mất hoặc hư hỏng dữ liệu và không phục hồi được.
16 UNAUTHENTICATED Yêu cầu không có thông tin xác thực hợp lệ cho thao tác.

Đôi khi, có thể áp dụng nhiều mã lỗi. Dịch vụ phải trả về mã lỗi cụ thể nhất có thể áp dụng. Ví dụ: ưu tiên OUT_OF_RANGE hơn FAILED_PRECONDITION nếu cả hai mã đều áp dụng. Tương tự, hãy ưu tiên NOT_FOUND hoặc ALREADY_EXISTS thay vì FAILED_PRECONDITION.

FAILED_PRECONDITION so với ABORTED so với UNAVAILABLE

Sau đây là một bài kiểm thử litmus có thể giúp bạn quyết định giữa FAILED_PRECONDITION, ABORTEDUNAVAILABLE:

  • Sử dụng UNAVAILABLE nếu ứng dụng chỉ có thể thử lại lệnh gọi không thành công.
  • Sử dụng ABORTED nếu ứng dụng nên thử lại ở cấp cao hơn, chẳng hạn như khi một quy trình kiểm thử và đặt do ứng dụng chỉ định không thành công, cho biết rằng ứng dụng nên khởi động lại một trình tự đọc-sửa đổi-ghi.
  • Sử dụng FAILED_PRECONDITION nếu ứng dụng không nên thử lại cho đến khi trạng thái hệ thống được khắc phục rõ ràng. Ví dụ: nếu "rmdir" không thành công vì thư mục không trống, tốt nhất bạn nên trả về FAILED_PRECONDITION vì ứng dụng không nên thử lại trừ khi các tệp bị xoá khỏi thư mục.

INVALID_ARGUMENT so với FAILED_PRECONDITION so với OUT_OF_RANGE

Sau đây là một bài kiểm thử litmus có thể giúp bạn quyết định giữa INVALID_ARGUMENT, FAILED_PRECONDITIONOUT_OF_RANGE:

  • Sử dụng INVALID_ARGUMENT nếu các đối số gặp vấn đề bất kể trạng thái của hệ thống. Ví dụ: URL không đúng định dạng
  • Sử dụng OUT_OF_RANGE nếu một giá trị nằm ngoài phạm vi do trạng thái của hệ thống. Ví dụ: ngày_bắt_đầu trước start_date_restrict.
  • Sử dụng FAILED_PRECONDITION nếu giá trị không hợp lệ do trạng thái của hệ thống, nhưng không phải là giá trị OUT_OF_RANGE.