400 Permintaan Buruk sekarang tampaknya menjadi kode status HTTP / 1.1 terbaik untuk kasus penggunaan Anda.
Pada saat pertanyaan Anda (dan jawaban asli saya), RFC 7231 bukanlah sesuatu; pada titik mana saya keberatan 400 Bad Request
karena RFC 2616 berkata (dengan penekanan pada saya):
Permintaan tidak dapat dipahami oleh server karena sintaksis yang salah .
dan permintaan yang Anda jelaskan adalah JSON yang secara sintaksis valid, terbungkus dalam HTTP yang secara sintaksis valid, dan dengan demikian server tidak memiliki masalah dengan sintaksis permintaan.
Namun seperti yang ditunjukkan oleh Lee Saferite dalam komentar , RFC 7231, yang usang RFC 2616, tidak termasuk batasan itu :
Kode status 400 (Permintaan Buruk) menunjukkan bahwa server tidak dapat atau tidak akan memproses permintaan karena sesuatu yang dianggap sebagai kesalahan klien (misalnya, sintaks permintaan salah bentuk, pembingkaian pesan permintaan tidak valid, atau perutean permintaan yang menipu).
Namun, sebelum itu ulang kata-kata (atau jika Anda ingin berdalih tentang RFC 7231 hanya menjadi standar yang diusulkan saat ini), 422 Unprocessable Entity
sepertinya kode status HTTP tidak salah untuk kasus penggunaan Anda, karena seperti kata pengantar RFC 4918 mengatakan:
Sementara kode status yang disediakan oleh HTTP / 1.1 cukup untuk menggambarkan sebagian besar kondisi kesalahan yang ditemui oleh metode WebDAV, ada beberapa kesalahan yang tidak termasuk dalam kategori yang ada. Spesifikasi ini mendefinisikan kode status tambahan yang dikembangkan untuk metode WebDAV (Bagian 11)
Dan deskripsi422
kata:
Kode status 422 (Entitas yang Tidak Dapat Diproses) berarti server memahami jenis konten entitas permintaan (oleh karena itu kode status 415 (Jenis Media yang Tidak Didukung) tidak pantas), dan sintaks entitas permintaan benar (dengan demikian 400 (Permintaan Buruk) ) kode status tidak pantas) tetapi tidak dapat memproses instruksi yang terkandung.
(Perhatikan referensi sintaksis; saya menduga 7231 juga sebagian 4918)
Ini terdengar persis seperti situasi Anda, tetapi kalau-kalau ada keraguan, ia melanjutkan dengan mengatakan:
Sebagai contoh, kondisi kesalahan ini dapat terjadi jika badan permintaan XML berisi formulasi XML yang baik (yaitu, benar secara sintaksis), tetapi secara semestinya salah.
(Ganti "XML" dengan "JSON" dan saya pikir kami dapat menyetujui itu adalah situasi Anda)
Sekarang, beberapa orang akan keberatan bahwa RFC 4918 adalah tentang "Ekstensi HTTP untuk Web Authorized and Versioning (WebDAV)" dan bahwa Anda (mungkin) tidak melakukan apa pun yang melibatkan WebDAV sehingga tidak boleh menggunakan hal-hal dari itu.
Mengingat pilihan antara menggunakan kode kesalahan dalam standar asli yang secara eksplisit tidak mencakup situasi, dan satu dari ekstensi yang menggambarkan situasi dengan tepat, saya akan memilih yang terakhir.
Lebih jauh, RFC 4918 Bagian 21.4 merujuk pada Registri Kode Status IANA Hypertext Transfer Protocol (HTTP) , di mana 422 dapat ditemukan.
Saya mengusulkan bahwa sangat masuk akal bagi klien HTTP atau server untuk menggunakan kode status apa pun dari registri itu, selama mereka melakukannya dengan benar.
Tetapi pada HTTP / 1.1, RFC 7231 memiliki daya tarik, jadi gunakan saja 400 Bad Request
!