Saya memiliki JSON permintaan yang saya'm postingan URL HTTP.
Hal ini harus diperlakukan sebagai 400
di mana requestedResource
lapangan ada tapi "Roman"
adalah nilai yang tidak valid untuk bidang ini?
[{requestedResource:"Roman"}]
Hal ini harus diperlakukan sebagai 400
di mana "bla"
bidang doesn't ada sama sekali?
[{blah:"Roman"}]
400 berarti bahwa permintaan itu rusak. Dengan kata lain, aliran data yang dikirim oleh client ke server didn't mengikuti aturan.
Dalam kasus REST API dengan JSON muatan, 400's biasanya, dan benar saya akan mengatakan, yang digunakan untuk menunjukkan bahwa JSON adalah tidak valid dalam beberapa cara sesuai dengan spesifikasi API untuk layanan.
Dengan logika itu, kedua skenario yang anda berikan harus 400's.
Bayangkan bukan ini yang XML daripada JSON. Dalam kedua kasus, XML tidak akan pernah lulus validasi skema--baik karena undefined unsur atau elemen yang tidak tepat nilai. Itu akan menjadi sebuah permintaan buruk. Kesepakatan yang sama di sini.
Memilih kode respon HTTP ini cukup mudah dan dapat digambarkan dengan aturan sederhana. Satu-satunya yang rumit bagian yang sering dilupakan adalah ayat 6.5 dari RFC 7231:
Kecuali saat menanggapi permintaan HEAD, server HARUS mengirimkan representasi yang berisi penjelasan tentang kesalahan situasi, dan apakah sementara atau permanen kondisi.
Aturan adalah sebagai berikut:
Jadi pada kasus anda, saya'a kembali 400 kesalahan dan sesuatu seperti ini jika "Roman" diperoleh dari input user dan klien harus memiliki reaksi spesifik:
{
"error_type" : "unsupported_resource",
"error_description" : "\"Roman\" is not supported"
}
atau yang lebih generik kesalahan, jika situasi seperti itu adalah buruk kesalahan logika pada klien dan tidak diharapkan, kecuali pengembang membuat sesuatu yang salah:
{
"error_type" : "malformed_json",
"error_description" : "\"Roman\" is not supported for \"requestedResource\" field"
}
Dalam kedua kasus adalah "sintaks ping". It's semantik yang salah. Oleh karena itu, IMHO 400 adalah tidak pantas. Sebaliknya, itu akan sesuai untuk kembali 200 bersama dengan beberapa jenis kesalahan objek seperti { "kesalahan": { "pesan": "tidak Diketahui permintaan kata kunci" } }
atau apa pun.
Mempertimbangkan klien pengolahan path(s). Kesalahan dalam sintaks (misalnya tidak valid JSON) adalah sebuah kesalahan dalam logika program, dengan kata lain sebuah bug dari beberapa macam, dan harus ditangani dengan demikian, dalam cara yang mirip dengan 403, mengatakan; dalam kata lain, sesuatu yang buruk telah terjadi.
Kesalahan dalam parameter nilai, di sisi lain, kesalahan semantik, mungkin karena mengatakan buruk divalidasi input pengguna. Itu bukan sebuah kesalahan HTTP (meskipun saya kira itu bisa menjadi 422). Pengolahan jalan akan berbeda.
Misalnya, dalam jQuery, aku akan memilih untuk tidak harus menulis satu error handler yang berhubungan dengan hal-hal seperti 500 dan beberapa aplikasi-spesifik kesalahan semantik. Framework lain, Ember untuk satu, juga mengobati HTTP kesalahan seperti yang 400 dan 500-an identik sebagai lemak besar kegagalan, membutuhkan programmer untuk mendeteksi apa yang's terjadi dan cabang tergantung pada apakah itu's "nyata" kesalahan atau tidak.
Menggunakan 400
kode status untuk tujuan lain dari yang menunjukkan bahwa permintaan ping adalah jelas salah.
Jika permintaan muatan berisi byte-urutan yang tidak dapat diuraikan sebagai application/json
(jika server mengharapkan bahwa dataformat), sesuai kode status 415
:
server menolak untuk melayani permintaan karena entitas permintaan dalam format yang tidak didukung oleh sumber daya yang diminta untuk metode yang diminta.
Jika permintaan muatan sintaksis benar, tetapi secara semantik salah, non-standar 422
kode respon dapat digunakan, atau standar 403
status kode:
server memahami permintaan, tetapi menolak untuk memenuhinya. Otorisasi tidak akan membantu dan permintaan TIDAK HARUS diulang.
Berpikir tentang harapan.
Sebagai aplikasi klien, anda berharap untuk tahu jika ada sesuatu yang tidak beres pada sisi server. Jika kebutuhan server untuk melempar kesalahan ketika blah
hilang atau requestedResource
nilai salah dari 400 kesalahan akan sesuai.
Cek dulu URL itu mungkin salah, jika hal ini benar maka periksa permintaan tubuh yang anda kirim, kemungkinan penyebabnya adalah permintaan yang dikirim hilang sintaks yang tepat.
Untuk menguraikan , cek untuk karakter khusus dalam permintaan string. Jika hal ini (khusus char) yang digunakan ini adalah akar penyebab dari kesalahan ini.
cobalah menyalin permintaan dan menganalisis masing-masing dan setiap kategori data.
Sebagai pelengkap, bagi mereka yang mungkin menemui masalah yang sama seperti saya, saya'm menggunakan $.ajax
untuk mengirim data formulir ke server dan saya juga punya 400
error pada awalnya.
Misalnya saya punya sebuah variabel javascript,
var formData = {
"name":"Gearon",
"hobby":"Be different"
};
Tidak menggunakan variabel formData
langsung sebagai nilai kunci data
seperti di bawah ini:
$.ajax({
type: "post",
dataType: "json",
url: "http://localhost/user/add",
contentType: "application/json",
data: formData,
success: function(data, textStatus){
alert("Data: " + data + "\nStatus: " + status);
}
});
Sebaliknya, menggunakan JSON.stringify untuk merangkum formData
seperti di bawah ini:
$.ajax({
type: "post",
dataType: "json",
url: "http://localhost/user/add",
contentType: "application/json",
data: JSON.stringify(formData),
success: function(data, textStatus){
alert("Data: " + data + "\nStatus: " + status);
}
});
Lagi pula, sebagai orang lain telah digambarkan, kesalahan karena server tidak bisa mengenali permintaan menyebabkan kesalahan syntax, I'm hanya mengangkat sebuah contoh praktek. Harapan itu akan sangat membantu untuk seseorang.