Apakah kode respons HTTP optimal ketika tidak melaporkan 200 (semuanya OK) tetapi kesalahan dalam input?
Seperti, Anda mengirimkan beberapa data ke server, dan itu akan menjawab bahwa data Anda salah
menggunakan 500
lebih mirip Server Issue
menggunakan 200
dengan peringatan / teks respons kesalahan buruk (memungkinkan caching dan semuanya tidak OK)
menggunakan 204
dan mengembalikan apa-apa, apakah mungkin baik (tetapi didukung dengan baik?)
menggunakan 404
salah jika jalur yang diminta (skrip) tersedia dan di tempat yang tepat
api
http
validation
Marek Sebera
sumber
sumber
Jawaban:
Kami memiliki masalah yang sama saat membuat API kami juga. Kami sedang mencari kode status HTTP yang setara dengan
InvalidArgumentException
. Setelah membaca artikel sumber di bawah ini, kami akhirnya menggunakan422 Unprocessable Entity
yang menyatakan:sumber: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm
sumber
Kode yang dimulai dengan 4 (4xx) dimaksudkan untuk kesalahan klien. Mungkin 400 (Permintaan Buruk) bisa cocok untuk kasus ini? Definisi dalam http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html mengatakan:
"Permintaan tidak dapat dipahami oleh server karena sintaksis cacat. Klien TIDAK HARUS mengulangi permintaan tanpa modifikasi."
sumber
400 Bad Request
tidak buruk tetapi umumnya harus disediakan untuk sintaks cacat. OP tampaknya lebih peduli tentang kasus dengan sintaksis yang baik tetapi nilai-nilai tidak valid. Plus 400 adalah kode respons "oh sial sesuatu yang tidak benar" yang cukup umum yang mungkin ingin Anda bedakan dari kasus input salah.Selain Spesifikasi RFC Anda juga dapat melihat ini dalam tindakan. Lihat tanggapan twitter.
https://developer.twitter.com/en/docs/ads/general/guides/response-codes
sumber
409 Conflict
bisa menjadi solusi yang bisa diterima.Berdasarkan: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Doc melanjutkan dengan sebuah contoh:
Dalam kasus saya, saya ingin PUT string, yang harus unik, ke database melalui API. Sebelum menambahkannya ke database, saya memeriksa bahwa itu belum ada dalam database.
Jika ya, saya akan kembali
"Error: The string is already in the database", 409
.Saya percaya inilah yang diinginkan OP: kode kesalahan cocok untuk ketika data tidak lulus kriteria server.
sumber
Menurut skenario di bawah ini,
Katakanlah seseorang membuat permintaan ke server Anda dengan data yang dalam format yang benar, tetapi sama sekali bukan data "baik". Jadi misalnya, bayangkan bahwa seseorang memposting nilai String ke titik akhir API yang mengharapkan nilai String; tetapi, nilai string berisi data yang dimasukkan dalam daftar hitam (mis. mencegah orang menggunakan "kata sandi" sebagai kata sandi mereka). maka kode status bisa berupa 400 atau 422?
Sampai sekarang, saya akan mengembalikan "400 Permintaan Buruk", yang, menurut w3.org, berarti:
Deskripsi ini tidak sesuai dengan keadaan; tetapi, jika Anda melihat daftar kode status HTTP inti yang didefinisikan dalam protokol HTTP / 1.1, itu mungkin pilihan terbaik Anda.
Namun baru-baru ini, seseorang dari tim Dev saya menunjukkan [kepada saya] bahwa API populer mulai menggunakan ekstensi HTTP untuk mendapatkan lebih banyak rincian dengan pelaporan kesalahan mereka. Secara khusus, banyak API, seperti Twitter dan Recurly, menggunakan kode status "422 Entitas yang Tidak Dapat Diproses" sebagaimana didefinisikan dalam ekstensi HTTP untuk WebDAV. Kode status HTTP 422 menyatakan:
Kembali ke contoh kata sandi kami dari atas, kode status 422 ini terasa jauh lebih tepat. Server memahami apa yang Anda coba lakukan; dan ia memahami data yang Anda kirim; itu tidak akan membiarkan data diproses.
sumber
404 - Tidak Ditemukan - dapat digunakan untuk URI yang diminta tidak valid atau sumber daya yang diminta seperti pengguna, tidak ada.
sumber