Validasi Input & Format Error yang Konsisten
Menolak input yang salah dengan status 422 dan membuat satu format error yang sama untuk seluruh API.
Jangan percaya input
Client bisa mengirim apa saja: judul kosong, hanya spasi, atau teks sepanjang novel. API yang baik memeriksa input sebelum menyimpannya dan memberi tahu client dengan jelas apa yang salah.
Format error yang konsisten
Semua error sebaiknya berbentuk sama agar mudah ditangani client. Kita buat satu struct dan satu helper:
type ErrorResponse struct {
Error string `json:"error"`
}
func writeError(w http.ResponseWriter, status int, msg string) {
writeJSON(w, status, ErrorResponse{Error: msg})
}
Pemakaiannya: writeError(w, http.StatusNotFound, "todo tidak ditemukan") → {"error":"todo tidak ditemukan"}.
400 atau 422?
| Kode | Dipakai ketika | Contoh |
|---|---|---|
400 Bad Request | Permintaan tidak bisa dibaca | JSON rusak |
422 Unprocessable Entity | Terbaca, tetapi isinya tidak valid | title kosong |
Aturan validasi untuk title
- Buang spasi di awal/akhir:
strings.TrimSpace. - Tidak boleh kosong setelah dibersihkan.
- Maksimal 100 karakter:
len(title) > 100.
title := strings.TrimSpace(in.Title)
if title == "" {
writeError(w, http.StatusUnprocessableEntity, "title wajib diisi")
return
}
Validasi dilakukan sebelum store.Add, dan setiap pelanggaran langsung return.