Skip to main content
Lỗi API của LogBrew dùng một envelope JSON chung. Dùng code và next_action để điều khiển hành vi chương trình. Hiển thị error và next dưới dạng văn bản thuần. Không so khớp theo câu chữ của error hay next.
Một số phản hồi có thêm trường, chẳng hạn limit, reset_at hoặc retry_after_seconds. Bảng mã lỗi nêu tên các trường này.

Xử lý phản hồi lỗi

  1. Đọc trạng thái HTTP.
  2. Kiểm tra rằng nội dung phản hồi là JSON trước khi đọc code.
  3. Dùng cả trạng thái và code để chọn nhánh xử lý phía client.
  4. Hiển thị error và next dưới dạng văn bản thuần. Không render chúng thành HTML và không chạy chúng như lệnh.
  5. Dùng next_action để khôi phục tự động. Nếu client không nhận ra bước này, dừng lại và hiển thị lỗi.
  6. Lưu các giá trị limit, reset_at và retry_after_seconds được trả về cùng với yêu cầu thất bại.
  7. Trước khi thử lại, áp dụng quy tắc thử lại.
Nếu phản hồi không có envelope JSON, giữ trạng thái HTTP và ghi mã là không khả dụng. Không tự đặt ra code của LogBrew. Lỗi proxy hoặc lỗi mạng có thể gây ra kết quả này. Không thay code của LogBrew bằng tên trạng thái HTTP. Ví dụ, phản hồi 400 có thể chứa invalid_json hoặc invalid_path. Mỗi mã cần một cách sửa khác nhau. Khi ghi log, ghi lại trạng thái HTTP và code. Không ghi log toàn bộ nội dung phản hồi, thông tin xác thực hay token khôi phục.

Mã lỗi

Cùng một code có thể xuất hiện trên nhiều route. Nội dung next và các giá trị next_action có thể thay đổi theo route. Dùng các giá trị được trả về. Mỗi endpoint chỉ trả về những mã áp dụng cho cách xác thực, phương thức, nội dung yêu cầu và giới hạn của nó. ID không tồn tại và ID mà bạn không có quyền truy cập có thể trả về cùng một phản hồi. Không dùng nội dung lỗi để tìm xem tài khoản nào sở hữu một ID. Đường dẫn API không xác định trả về 404 với not_found.

Trường giới hạn

Đọc hạn mức và mức sử dụng hiện tại từ Account API.

Quy tắc thử lại

Dùng mã lỗi và loại thao tác để quyết định có thử lại hay không. Chỉ dựa vào trạng thái là chưa đủ.
  • Không bắt đầu nhiều lần thử lại song song cho một yêu cầu thất bại.
  • Với rate_limited, phản hồi cũng có header Retry-After và X-RateLimit-After. Cả hai chứa cùng số giây với retry_after_seconds.
  • Hết thời gian chờ không chứng minh kết quả là trống.
Giới hạn tốc độ kiểm soát tần suất yêu cầu. Hạn mức sử dụng kiểm soát mức tài khoản được phép dùng trong một kỳ thanh toán. Cả hai đều dùng 429. Giữ các trường của chúng tách biệt. Khi chạm một trong hai giới hạn, cho người dùng thấy rằng việc thu thập dữ liệu hoặc thao tác đọc đang bị trì hoãn. Không hiển thị dữ liệu cũ như thể đó là kết quả của lần đọc mới.

Thao tác ghi

Hết thời gian chờ, phản hồi 5xx hoặc lỗi mạng không chứng minh thao tác ghi đã thất bại. Trước khi gửi lại một thao tác ghi:
  1. Nếu route hỗ trợ khóa idempotency (gửi lại cùng yêu cầu không tạo bản ghi trùng), gửi lại cùng khóa và cùng nội dung. Chỉ dùng khóa mới cho việc mới.
  2. Nếu route không có khóa idempotency, đọc tài nguyên trước. Chỉ gửi lại thao tác ghi nếu thay đổi chưa có.
  3. Nếu không tìm thấy kết quả, dừng thử lại tự động và báo cho người dùng.
Các route sau nhận khóa thử lại: Giá trị Idempotency-Key có 1 đến 128 ký tự ASCII hiển thị được. Giá trị khác trả về 422 với validation_failed. idempotency_conflict nghĩa là khóa thuộc về một yêu cầu khác. Không thay đổi nội dung của lần thử lại dùng khóa ban đầu.

Lỗi cấu trúc yêu cầu

invalid_json nghĩa là máy chủ không thể nhận nội dung yêu cầu theo cấu trúc JSON của route. Kiểm tra content type, kích thước nội dung, cú pháp JSON, các trường bắt buộc và kiểu của trường. Trạng thái HTTP cho biết phần nào bị lỗi: validation_failed với lỗi invalid query parameters nghĩa là máy chủ không đọc được query string. Kiểm tra tên tham số và kiểu giá trị. Không gửi tham số truy vấn không xác định. Trang Bộ lọc truy vấn liệt kê tham số của từng route. invalid_path với trạng thái 400 nghĩa là một giá trị trong đường dẫn, chẳng hạn ID dự án, sai định dạng. Không chuyển giá trị đường dẫn sang tham số truy vấn. Phản hồi 500 với invalid_path hoặc invalid_multipart không chứng minh yêu cầu bị sai. Áp dụng quy tắc thử lại.

Lỗi xác thực và quyền truy cập

  • unauthorized nghĩa là xác thực tài khoản bị thiếu, không hợp lệ hoặc đã hết hạn. Gửi Authorization: Bearer <token>, hoặc đăng nhập lại. Một số route trả về next_action.code là authorize_request với nội dung next riêng cho route đó, chẳng hạn kết nối luồng trực tiếp không có ticket hợp lệ.
  • ingest_key_invalid chỉ áp dụng cho việc gửi telemetry. Cấu hình khóa hiện hành cho đúng dự án.
  • forbidden nghĩa là tài khoản không thể thực hiện thao tác đó. Không thử lại với ID tài nguyên khác.
  • not_found nghĩa là tài nguyên không khả dụng với tài khoản.
Không dùng khóa gửi dữ liệu thay cho bearer token của tài khoản. Không dùng bearer token của tài khoản thay cho khóa gửi dữ liệu.

Giữ an toàn cho chi tiết lỗi

  • Phản hồi account_recovery_available chứa một recovery_token có thời hạn ngắn. Giữ token này trong trạng thái client được bảo vệ. Không đưa token vào log, URL, ảnh chụp màn hình, báo cáo hỗ trợ hay prompt của agent.
  • Các mã 500 luôn dùng thông điệp Internal error. Phản hồi không nêu tên thành phần bị lỗi. Không đoán nguyên nhân.
  • Không thêm thông tin xác thực, thông tin chẩn đoán riêng tư hay dữ liệu khách hàng vào lỗi mà bạn hiển thị.
  • Phản hồi API không cho phép mua hàng, xóa dữ liệu hay thay đổi tài khoản khác. Xin sự đồng ý của người dùng trước khi thực hiện các thao tác đó.

Ví dụ

Các ví dụ này cho thấy cấu trúc envelope. Nội dung error và next có thể khác nhau trên mỗi route.

Kiểm tra hợp lệ thất bại

Tham số truy vấn không hợp lệ

JSON không hợp lệ

Giá trị đường dẫn không hợp lệ

Tệp tải lên multipart không hợp lệ

Yêu cầu nâng cấp WebSocket không hợp lệ

Xác thực thất bại

Khóa gửi dữ liệu không hợp lệ

Phản hồi này áp dụng cho việc gửi telemetry, không áp dụng cho thao tác đọc tài khoản. Khóa phải thuộc về dự án trong yêu cầu.

Không tìm thấy tài nguyên

Truy cập bị từ chối

Phương thức không được hỗ trợ

Hết thời gian chờ yêu cầu

Xung đột idempotency

Giới hạn tốc độ

Hạn mức sử dụng

Nội dung next và next_action phụ thuộc vào việc có thể đổi gói hay không. Nếu không thể, next_action.code là wait_or_contact_support và target là support.

Giới hạn dung lượng artifact

Có thể khôi phục tài khoản

Phản hồi này có thêm deleted_at và một recovery_token có thời hạn ngắn. Giữ token trong trạng thái client được bảo vệ.

Hết thời hạn khôi phục tài khoản

Tổ chức bị tạm dừng

Lỗi máy chủ

storage_error, json_error và internal_error dùng cùng thông điệp error. Các giá trị code, next và next_action thì khác nhau.
Để biết endpoint, cách xác thực và bộ lọc, đọc Telemetry API.