Tôi đang ở một ngã rẽ với một số thiết kế API cho một khách hàng (JS trong trình duyệt) để nói chuyện với máy chủ. Chúng tôi sử dụng Xung đột HTTP 409 để thể hiện sự thất bại của một hành động vì khóa an toàn có hiệu lực. Khóa satefy ngăn các nhà phát triển vô tình thay đổi hệ thống sản xuất của khách hàng. Tôi đã được giao nhiệm vụ xử lý 409 một cách duyên dáng hơn trên máy khách để cho biết lý do tại sao một lệnh gọi API cụ thể không thành công.
Giải pháp của tôi là bọc các trình xử lý lỗi của bất kỳ cuộc gọi AJAX nào của chúng tôi sẽ hiển thị thông báo trên máy khách khi có sự cố do 409 - điều này hoàn toàn tốt và hoạt động tốt cùng với các lỗi 4XX và 5XX khác sử dụng cùng một cơ chế.
Một vấn đề đã phát sinh khi một trong những người xử lý tuyến đường của chúng tôi phản hồi với 409 giây khi gặp lỗi logic nghiệp vụ - trình bao bọc AJAX của tôi báo cáo rằng khóa an toàn được bật, trong khi trình xử lý lỗi hiện tại của khách hàng báo cáo vấn đề (nó nghĩ) là gì của phản ứng. Một giải pháp đơn giản sẽ là thay đổi phản hồi của trình xử lý hoặc mã trạng thái mà chúng ta sử dụng để thể hiện khóa an toàn.
Điều này đưa tôi đến ngã tư của mình: các mã trạng thái HTTP có nên được sử dụng để thể hiện các lỗi logic nghiệp vụ không? Câu hỏi này giải quyết cùng một vấn đề tôi đang gặp phải nhưng nó không đạt được nhiều sức kéo. Như được đề xuất trong câu trả lời được liên kết, tôi nghiêng về việc sử dụng HTTP 200 OK với phần thân thích hợp để thể hiện sự thất bại trong logic nghiệp vụ.
Có ai có bất kỳ ý kiến mạnh mẽ ở đây? Có ai có thể thuyết phục tôi đây là cách sai để đại diện cho thất bại?
400 Bad Request
vì mã HTTP có vẻ tốt nhất để che các lỗi logic nghiệp vụ như một lớp.
400 Bad Request
khi dữ liệu bị thiếu hoặc không thể đọc / phân tích cú pháp. Tức là dữ liệu yêu cầu tự nó là xấu theo một cách nào đó.
400 Bad Request
. Lý do cho sự tách biệt này là bởi vì các hệ thống, nhà phát triển hoặc người đọc tài liệu trong tương lai có thể bị nhầm lẫn bởi sự sai lệch của bạn về tiêu chuẩn trên toàn thế giới.