Untuk apa nilainya, saya melakukan ini secara berbeda. Panggilan yang berhasil hanya memiliki objek JSON. Saya tidak memerlukan objek JSON tingkat lebih tinggi yang berisi bidang keberhasilan yang menunjukkan bidang benar dan muatan yang memiliki objek JSON. Saya baru saja mengembalikan objek JSON yang sesuai dengan 200 atau apa pun yang sesuai dalam kisaran 200 untuk status HTTP di header.
Namun, jika ada kesalahan (sesuatu dalam 400 keluarga) saya mengembalikan objek kesalahan JSON yang terbentuk dengan baik. Sebagai contoh, jika klien mem-POSTing Pengguna dengan alamat email dan nomor telepon dan salah satunya rusak (yaitu saya tidak bisa memasukkannya ke dalam basis data saya) saya akan mengembalikan sesuatu seperti ini:
{
"description" : "Validation Failed"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Invalid phone number."
} ],
}
Bit penting di sini adalah bahwa properti "bidang" harus cocok dengan bidang JSON persis yang tidak dapat divalidasi. Ini memungkinkan klien untuk mengetahui apa yang salah dengan permintaan mereka. Juga, "pesan" ada di lokasi permintaan. Jika kedua "alamat email" dan "nomor telepon" tidak valid maka array "kesalahan" akan berisi entri untuk keduanya. Badan respons JSON 409 (Konflik) mungkin terlihat seperti ini:
{
"description" : "Already Exists"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Phone number already exists for another user."
} ],
}
Dengan kode status HTTP dan JSON ini, klien memiliki semua yang mereka butuhkan untuk merespons kesalahan dengan cara yang deterministik dan tidak membuat standar kesalahan baru yang mencoba menyelesaikan menggantikan kode status HTTP. Catatan, ini hanya terjadi untuk kisaran 400 kesalahan. Untuk apa pun dalam kisaran 200 saya hanya bisa mengembalikan apa pun yang sesuai. Bagi saya itu sering merupakan objek JSON seperti HAL tapi itu tidak terlalu penting di sini.
Satu hal yang saya pikirkan tentang menambahkan adalah kode kesalahan numerik baik dalam entri array "kesalahan" atau root dari objek JSON itu sendiri. Tapi sejauh ini kami belum membutuhkannya.