Phản hồi lỗi của API LinkHarbor có cấu trúc thế nào, các mã lỗi quan trọng nhất có nghĩa gì và mã của bạn nên phản ứng ra sao.
Mọi phản hồi lỗi của API đều có cùng định dạng. Mã của bạn nên dựa vào mã lỗi trong trường error, không dựa vào văn bản trong message – mã luôn ổn định, còn văn bản có thể thay đổi và được dịch sang ngôn ngữ tài khoản.
Cấu trúc của phản hồi lỗi
{
"error": "validation_failed",
"message": "Some of the information provided is invalid. Please check and try again.",
"details": [
{ "field": "title", "reason": "minLength", "message": "…" }
],
"request_id": "6b1f0c2e-…"
} - error
- Mã máy đọc được, ví dụ not_found. Với phần lớn lỗi, mã này cũng có trong header X-Error-Code – nhưng hãy dựa vào trường trong phần thân.
- message
- Mô tả cho người đọc theo ngôn ngữ tài khoản: với khóa API là ngôn ngữ của chủ sở hữu không gian làm việc, với ứng dụng đã kết nối là ngôn ngữ của người đã kết nối nó. Khi không có token hợp lệ – ví dụ 401 từ bước kiểm tra token – ngôn ngữ theo Accept-Language, nếu không thì là tiếng Anh. Header Content-Language nêu ngôn ngữ.
- details
- Chỉ có khi cần nói thêm. Với 422 từ kiểm tra dữ liệu nhập, là một danh sách với field, reason và message cho từng vấn đề; với 422 từ logic nghiệp vụ và mọi lỗi khác, là một object, ví dụ với reason, retry_after_sec hoặc danh sách issues. Khi vượt kích thước, nó chứa field, reason và limit, và với 413 request_too_large là max_bytes và max_kb. Vì vậy hãy kiểm tra details có phải danh sách không.
- request_id
- ID của yêu cầu. ID này cũng có trong header X-Request-Id. Hãy gửi kèm khi liên hệ bộ phận hỗ trợ.
Ngoại lệ: phản hồi 429 rate_limited có trường retry_after_sec thay vì details; với 429 và 403 insufficient_scope, request_id không có trong phần thân. 401 từ bước kiểm tra token và 422 từ bước kiểm tra schema không có header X-Error-Code, và với bước kiểm tra schema chỉ message cấp cao nhất được dịch; các văn bản bên trong details vẫn bằng tiếng Anh. Header X-Request-Id luôn được đặt.
Các mã quan trọng nhất
| HTTP | error | Ý nghĩa | Cần làm gì |
|---|---|---|---|
| 400 | invalid_json | Phần thân không phải JSON hợp lệ | Kiểm tra JSON |
| 400 | bad_request | Sai Content-Type hoặc yêu cầu sai định dạng | Đặt Content-Type: application/json |
| 401 | missing_bearer_token | Không có token trong header Authorization | Đặt header Authorization: Bearer … |
| 401 | invalid_token | Token hết hạn hoặc không hợp lệ, hoặc khóa đã bị xóa | Lấy token mới; nếu không được, hãy kiểm tra khóa |
| 401 | invalid_api_key | Sai ID khóa hoặc mã bí mật khi đổi token | Kiểm tra thông tin xác thực |
| 402 | plan_limit_reached | Đạt giới hạn của gói, ví dụ với liên kết rút gọn | Nâng cấp hoặc xóa bớt mục |
| 403 | insufficient_scope | Thiếu phạm vi hoặc endpoint không mở cho khóa API | Tạo khóa với đúng phạm vi |
| 403 | forbidden | Không có quyền cho thao tác này | Thực hiện trong bảng điều khiển |
| 403 | feature_not_available | Tính năng không có trong gói | Kiểm tra gói |
| 403 | block_type_requires_plan | Loại khối chỉ có ở gói cao hơn | Chọn loại khối khác hoặc nâng cấp |
| 403 | template_locked | Mẫu premium không có trong gói hiện tại | Chọn mẫu từ GET /v1/templates/available |
| 403 | workspace_suspended, workspace_read_only, workspace_grace_expired | Không gian làm việc bị khóa hoặc chỉ đọc vì khoản thanh toán còn nợ | Xử lý thanh toán trong bảng điều khiển |
| 404 | not_found | Tài nguyên không tồn tại hoặc không thuộc không gian làm việc của bạn | Kiểm tra ID |
| 409 | conflict | Xung đột chung với trạng thái hiện tại | Tải lại trạng thái, thay đổi dữ liệu nhập |
| 409 | workspace_template_in_use | Mẫu không gian làm việc vẫn đang được các trang dùng; số lượng nằm trong details.count | Chuyển các trang sang mẫu khác rồi xóa |
| 409 | handle_taken, slug_taken | Handle hoặc slug liên kết rút gọn đã có người dùng | Chọn giá trị khác |
| 409 | form_in_use, page_not_private, page_not_published, never_published | Xung đột với trạng thái: biểu mẫu vẫn ở trên trang, trang không riêng tư hoặc chưa xuất bản, chưa từng xuất bản | Thay đổi trạng thái rồi thử lại |
| 409 | page_limit_reached, link_limit_reached, block_limit_reached, form_limit_reached, asset_limit_reached, asset_storage_limit_reached, workspace_template_limit_reached | Đạt giới hạn số lượng hoặc dung lượng của gói | Xóa bớt mục hoặc nâng cấp |
| 409 | draft_not_publishable | Bản nháp có vấn đề; danh sách nằm trong details.issues | Sửa các vấn đề rồi xuất bản lại |
| 413 | request_too_large | Phần thân lớn hơn mức cho phép của endpoint này (64 KB, 1 MB hoặc 2 MB); giới hạn nằm trong details.max_kb | Gửi ít dữ liệu hơn mỗi yêu cầu, xem Giới hạn tần suất |
| 413 | payload_too_large | Tệp tải lên lớn hơn 10 MB | Làm tệp nhỏ hơn |
| 422 | validation_failed | Dữ liệu nhập không hợp lệ hoặc trường không xác định; chi tiết trong details | Sửa các trường như mô tả trong details |
| 422 | handle_reserved, target_url_invalid, target_url_scheme, target_url_host | Handle được dành riêng, hoặc URL đích không hợp lệ hay không được phép | Chọn giá trị khác |
| 422 | workspace_template_disabled | Mẫu không gian làm việc đã chọn bị tắt | Bật mẫu trong “Tên miền & mẫu” hoặc chọn mẫu khác |
| 422 | template_css_external, template_section_invalid | Mẫu không gian làm việc: CSS tải từ máy chủ bên ngoài, hoặc một phần {{#if}}/{{#unless}}/{{#each}} đặt sai vị trí | Xóa địa chỉ bên ngoài, hoặc đóng phần đó trong cùng thẻ hoặc văn bản |
| 422 | custom_css_external | CSS tùy chỉnh tải nội dung từ máy chủ bên ngoài | Xóa địa chỉ bên ngoài khỏi CSS |
| 429 | rate_limited, api_key_locked | Quá nhiều yêu cầu, hoặc khóa bị khóa sau các lần thử sai | Đợi theo Retry-After hoặc details.retry_after_sec |
| 500 | internal_error | Lỗi không mong muốn | Thử lại sau, ghi lại request_id |
| 503 | service_unavailable | Dịch vụ tạm thời không khả dụng | Thử lại sau một khoảng nghỉ |
Đọc lỗi dữ liệu nhập
Với 422 validation_failed, details liệt kê riêng từng vấn đề: field là đường dẫn của trường (với dấu gạch chéo cho object lồng nhau, ví dụ theme_config/button_style), reason là quy tắc bị vi phạm, như required, minLength, maxLength, enum hoặc additionalProperties. Với additionalProperties, message cho biết những trường nào không xác định – thường do gõ sai tên trường.
Cách xử lý khuyến nghị trong mã
- 400, 413 và 422: đừng thử lại, hãy sửa yêu cầu
- 401 invalid_token: lấy token mới một lần rồi thử lại
- 403: đừng thử lại; hãy kiểm tra phạm vi, gói hoặc ai được phép làm việc này
- 404: kiểm tra ID; sau khi xóa thì điều này là bình thường
- 409: tải lại trạng thái và quyết định thao tác có còn cần không
- 429: đợi theo Retry-After rồi thử lại – xem Giới hạn tần suất
- 500 và 503: thử lại vài lần với khoảng nghỉ tăng dần
Có thể bạn cũng thấy hữu ích
Không tìm thấy?
Hãy cho chúng tôi biết bạn cần gì, đội hỗ trợ sẽ trực tiếp giúp bạn.