Saat ini saya mengembalikan 401 Tidak Sah setiap kali saya mengalami kegagalan validasi dalam aplikasi REST API berbasis Django / Piston saya . Setelah melihat Registry Status Status HTTP, saya tidak yakin bahwa ini adalah kode yang sesuai untuk kegagalan validasi, apa yang Anda rekomendasikan?
- 400 permintaan Buruk
- 401 Tidak Resmi
- 403 Dilarang
- 405 Metode Tidak Diizinkan
- 406 Tidak Dapat Diterima
- 412 Prasyarat Gagal
- 417 Harapan Gagal
- 422 Entitas yang Tidak Dapat Diproses
- 424 Dependensi Gagal
Pembaruan : "Kegagalan validasi" di atas berarti kegagalan validasi data tingkat aplikasi, mis., Waktu data yang ditentukan salah, alamat email palsu dll.
validation
rest
http-status-codes
michaeljoseph
sumber
sumber
Jawaban:
Jika "kegagalan validasi" berarti ada beberapa kesalahan klien dalam permintaan, maka gunakan HTTP 400 (Permintaan Buruk). Misalnya jika URI seharusnya memiliki tanggal ISO-8601 dan Anda menemukan bahwa itu dalam format yang salah atau mengacu pada 31 Februari, maka Anda akan mengembalikan HTTP 400. Ditto jika Anda mengharapkan XML yang terbentuk dengan baik dalam badan entitas dan gagal mem-parsing.
(1/2016): Selama lima tahun terakhir, HTTP 422 (Unprocessable Entity) WebDAV yang lebih spesifik telah menjadi alternatif yang sangat masuk akal untuk HTTP 400. Lihat misalnya penggunaannya dalam JSON API . Tetapi harap dicatat bahwa HTTP 422 belum membuatnya menjadi HTTP 1.1, RFC-7231 .
Richardson dan Ruby RESTful Web Services berisi lampiran yang sangat membantu tentang kapan harus menggunakan berbagai kode respons HTTP. Mereka bilang:
dan:
sumber
Dari RFC 4918 (dan juga didokumentasikan di http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml ):
sumber
Duplikat dalam database harus a
409 CONFLICT
.Saya sarankan menggunakan
422 UNPROCESSABLE ENTITY
untuk kesalahan validasi.Saya memberikan penjelasan lebih lama tentang kode 4xx di sini: http://parker0phil.com/2014/10/16/REST_http_4xx_status_codes_syntax_and_sematics/
sumber
Ini dia:
rfc2616 # section-10.4.1 - 400 Permintaan Buruk
rfc7231 # section-6.5.1 - 6.5.1. 400 permintaan Buruk
Mengacu pada kasus yang cacat (tidak berbentuk baik)!
rfc4918 - 11.2. 422 Entitas yang Tidak Dapat Diproses
Kesimpulan
Rule of thumb: [_] 00 mencakup kasus dan kasus yang paling umum yang tidak dicakup oleh kode yang ditentukan.
422 cocok dengan kesalahan validasi objek terbaik (tepatnya rekomendasi saya :)
Adapun kesalahan semantik - Pikirkan sesuatu seperti "Nama pengguna ini sudah ada" validasi.
400 salah digunakan untuk validasi objek
sumber
Saya akan mengatakan secara teknis itu mungkin bukan kegagalan HTTP, karena sumber daya itu (mungkin) ditentukan secara sah, pengguna diautentikasi, dan tidak ada kegagalan operasional (namun bahkan spek itu menyertakan beberapa kode cadangan seperti 402 Dibutuhkan Pembayaran yang diperlukan ' t secara tegas terkait dengan HTTP, meskipun mungkin disarankan untuk menggunakannya pada tingkat protokol sehingga perangkat apa pun dapat mengenali kondisinya).
Jika memang demikian, saya akan menambahkan bidang status ke respons dengan kesalahan aplikasi, seperti
<status><code>4</code> <message> Rentang tanggal tidak valid </message> </status>
sumber
Ada sedikit lebih banyak informasi tentang semantik kesalahan ini di RFC 2616 , yang mendokumentasikan HTTP 1.1.
Secara pribadi, saya mungkin akan menggunakan
400 Bad Request
, tetapi ini hanya pendapat pribadi saya tanpa dukungan faktual.sumber
Apa sebenarnya yang Anda maksud dengan "kegagalan validasi"? Apa yang Anda validasi? Apakah Anda merujuk pada sesuatu seperti kesalahan sintaksis (mis. XML cacat)?
Jika itu masalahnya, saya akan mengatakan 400 Permintaan Buruk mungkin adalah hal yang benar, tetapi tanpa mengetahui apa yang Anda "validasikan", tidak mungkin untuk mengatakannya.
sumber