Materi
JSON yang sah belum tentu data yang sah. {"jumlah": -2} lolos JSON.parse, tetapi pesanan minus dua roti tidak masuk akal. Validasi memeriksa data sesudah diurai: field wajib ada, tipenya benar tanpa diubah diam-diam, nilainya di rentang yang diizinkan, dan pilihannya termasuk daftar yang dikenal. Prinsip validasi itu sudah dibahas di kelas Pemrograman Web Aman; pelajaran ini berfokus pada cara server melaporkan hasilnya.
RFC 9110 §15.5.21 menetapkan 422 Unprocessable Content untuk permintaan yang jenis isinya dipahami dan sintaksnya benar, tetapi instruksinya tidak bisa diproses. Jadi JSON rusak dijawab 400, sedangkan JSON sah yang melanggar aturan dijawab 422. MDN menambahkan bahwa mengulang permintaan 422 tanpa perubahan akan gagal dengan galat yang sama, sehingga klien perlu tahu persis apa yang harus diperbaiki.
HTTP/1.1 422 Unprocessable Content
Content-Type: application/problem+json
{
"type": "https://api.mentari.example/masalah/validasi",
"title": "Data tidak valid",
"status": 422,
"errors": [
{ "pointer": "#/telepon", "detail": "wajib diisi" },
{ "pointer": "#/alamat/kota", "detail": "harus teks" }
]
}Contoh di RFC 9457 memakai member tambahan errors: daftar pelanggaran, masing-masing dengan detail dan pointer. pointer adalah JSON Pointer dalam bentuk fragmen URI: #/nama untuk field nama, #/barang/0/jumlah untuk jumlah pada barang pertama, dan # saja untuk seluruh badan. Kumpulkan semua pelanggaran dalam satu respons. Server yang berhenti di pelanggaran pertama memaksa pengguna mengirim ulang formulir sekali untuk setiap kesalahan.