Đối với những gì nó có giá trị tôi làm điều này khác nhau. Một cuộc gọi thành công chỉ có các đối tượng JSON. Tôi không cần một đối tượng JSON cấp cao hơn có chứa trường thành công cho biết trường thực và trường tải có đối tượng JSON. Tôi chỉ trả về đối tượng JSON thích hợp với 200 hoặc bất cứ điều gì phù hợp trong phạm vi 200 cho trạng thái HTTP trong tiêu đề.
Tuy nhiên, nếu có lỗi (một cái gì đó trong họ 400), tôi trả về một đối tượng lỗi JSON được định dạng tốt. Ví dụ: nếu khách hàng đang ĐĂNG người dùng có địa chỉ email và số điện thoại và một trong số đó không đúng định dạng (nghĩa là tôi không thể chèn nó vào cơ sở dữ liệu cơ bản của mình), tôi sẽ trả lại một cái gì đó như sau:
{
"description" : "Validation Failed"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Invalid phone number."
} ],
}
Các bit quan trọng ở đây là thuộc tính "trường" phải khớp chính xác với trường JSON không thể xác thực. Điều này cho phép khách hàng biết chính xác những gì đã sai với yêu cầu của họ. Ngoài ra, "tin nhắn" nằm trong miền địa phương của yêu cầu. Nếu cả "emailAddress" và "phoneNumber" đều không hợp lệ thì mảng "lỗi" sẽ chứa các mục nhập cho cả hai. Phần thân phản hồi JSON 409 (Xung đột) có thể trông như thế này:
{
"description" : "Already Exists"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Phone number already exists for another user."
} ],
}
Với mã trạng thái HTTP và JSON này, máy khách có tất cả những gì họ cần để phản hồi lỗi theo cách xác định và nó không tạo ra một tiêu chuẩn lỗi mới cố gắng hoàn thành thay thế mã trạng thái HTTP. Lưu ý, những điều này chỉ xảy ra trong phạm vi 400 lỗi. Đối với bất cứ điều gì trong phạm vi 200 tôi chỉ có thể trả lại bất cứ điều gì là phù hợp. Đối với tôi nó thường là một đối tượng JSON giống HAL nhưng điều đó không thực sự quan trọng ở đây.
Một điều tôi nghĩ về việc thêm là một mã lỗi số trong các mục mảng "lỗi" hoặc gốc của chính đối tượng JSON. Nhưng cho đến nay chúng tôi không cần nó.