Validation

Validation #

Validation adalah salah satu fondasi terpenting dalam pengembangan web application, namun sering dianggap remeh. Banyak bug, celah keamanan, dan inkonsistensi data berakar dari validation yang lemah atau tidak konsisten.

Artikel ini membahas purpose validation, nilai pentingnya, peran validation dalam sistem, aspek-aspek yang wajib divalidasi, hingga best practice implementasi validation yang relevan untuk web application modern.

Purpose dari Validation #

Secara sederhana, validation bertujuan untuk memastikan bahwa data yang masuk ke sistem sesuai dengan ekspektasi sistem.

Beberapa tujuan utama validation:

  • Mencegah data tidak valid masuk ke sistem
  • Menjaga konsistensi dan integritas data
  • Melindungi sistem dari abuse dan serangan
  • Memberikan feedback yang jelas ke user
  • Mengurangi error di layer bisnis dan persistence

Validation adalah gatekeeper pertama sebelum data diproses lebih jauh.


Nilai Penting Validation #

Validation bukan sekadar urusan UX, tetapi menyentuh banyak aspek kritikal:

Data Integrity #

Tanpa validation yang baik:

  • Database penuh data anomali
  • Logic bisnis jadi kompleks (defensive coding berlebihan)
  • Sulit melakukan analisis dan reporting

Security #

Banyak serangan bermula dari input yang tidak tervalidasi:

  • SQL Injection
  • XSS
  • Command Injection
  • Mass Assignment

Validation berperan sebagai lapisan security awal, meskipun bukan satu-satunya.

Reliability & Stability #

Input yang tidak valid dapat menyebabkan:

  • Panic / exception
  • Infinite loop
  • Resource leak

Validation membantu sistem fail fast dan fail safely.

User Experience #

Error yang jelas dan spesifik:

  • Mengurangi frustasi user
  • Mempercepat user memperbaiki input
  • Meningkatkan trust terhadap aplikasi

Peran Validation dalam Arsitektur Web Application #

Validation seharusnya tidak berdiri sendiri, melainkan bagian dari flow aplikasi:

[Client]
   ↓
(Client-side Validation)
   ↓
[API / Backend]
   ↓
(Request Validation)
   ↓
[Business Logic]
   ↓
(Domain Validation)
   ↓
[Database]

Prinsip penting:

  • Client-side validation: untuk UX
  • Server-side validation: untuk keamanan dan konsistensi
  • Domain validation: untuk menjaga rule bisnis

Client-side validation tidak pernah boleh dianggap cukup.


Aspek-Aspek yang Perlu Divalidasi #

Validation tidak hanya soal “required” atau “max length”. Berikut aspek utama yang wajib diperhatikan.

Structural Validation (Bentuk Data) #

Memastikan struktur data sesuai kontrak API.

Contoh:

  • Field wajib ada (required)
  • Tipe data benar (string, number, boolean)
  • Format JSON sesuai schema

Contoh validasi:

  • email harus string
  • age harus integer
  • items harus array

Format Validation #

Memastikan data mengikuti format tertentu.

Contoh:

  • Email format
  • UUID format
  • Date (ISO-8601)
  • Phone number
  • URL

⚠️ Hindari regex terlalu kompleks, fokus pada reasonable correctness.

Length & Size Validation #

Melindungi sistem dari data berlebihan.

Contoh:

  • Max length string
  • Min length password
  • Max size payload
  • Max jumlah item dalam array

Ini penting untuk:

  • Mencegah abuse
  • Mengontrol memory usage
  • Menjaga performa

Value Constraint Validation #

Memastikan nilai berada dalam rentang yang diizinkan.

Contoh:

  • Angka tidak negatif
  • Enum value (status, role)
  • Range tanggal

Contoh:

  • status ∈ [pending, active, suspended]
  • quantity > 0

Semantic / Business Validation #

Validasi berbasis rule bisnis.

Contoh:

  • User tidak boleh transfer saldo melebihi balance
  • Booking tidak boleh overlap
  • Email harus unik

Jenis validation ini tidak bisa diselesaikan hanya dengan schema.

Validasi yang berkaitan dengan identitas dan hak akses.

Contoh:

  • User hanya bisa update data miliknya
  • Role tertentu saja yang boleh mengakses endpoint
  • Token masih valid

Ini sering terlupakan dan dianggap bukan validation, padahal sangat krusial.

Contextual Validation #

Validasi tergantung konteks request.

Contoh:

  • Field reason wajib jika status = rejected
  • Field tertentu hanya boleh di-update pada state tertentu

Contextual validation biasanya muncul pada sistem kompleks.


Best Practice Validation Web Application #

Selalu Lakukan Server-Side Validation #

Client-side validation:

  • Bisa dimatikan
  • Bisa dimanipulasi

Server adalah single source of truth.

Pisahkan Validation dari Business Logic #

Hindari:

  • Validation bercampur di service logic

Gunakan:

  • Validator
  • Schema
  • Request DTO

Keuntungan:

  • Lebih mudah di-test
  • Lebih readable
  • Lebih reusable

Fail Fast dengan Error yang Jelas #

Prinsip:

  • Hentikan proses secepat mungkin jika input tidak valid
  • Jangan lanjut ke layer berikutnya

Error response sebaiknya:

  • Spesifik
  • Konsisten
  • Mudah dipahami

Gunakan Schema Validation #

Manfaat schema:

  • Kontrak API jelas
  • Dokumentasi implicit
  • Mudah di-extend

Contoh pendekatan:

  • OpenAPI Schema
  • JSON Schema
  • Struct validation (di backend)

Jangan Bocorkan Informasi Sensitif di Error Message #

Hindari:

  • Error database mentah
  • Stack trace
  • Detail internal sistem

Error message harus informatif tanpa membuka celah security.

Konsisten antara Create dan Update #

Perbedaan umum:

  • Create: banyak field required
  • Update: field opsional

Pastikan:

  • Rule tetap konsisten
  • Tidak ada celah bypass validation

Centralize Validation Rule #

Hindari:

  • Rule tersebar di banyak tempat

Keuntungan centralization:

  • Mudah perubahan
  • Minim bug
  • Konsistensi terjaga

Validasi Batasan Resource #

Jangan lupa validasi:

  • Pagination limit
  • File upload size
  • Batch request size

Ini bagian dari defensive programming.

Testing untuk Validation #

Validation wajib dites:

  • Unit test
  • Edge case
  • Negative scenario

Validation tanpa test adalah false sense of security.


Penutup #

Validation bukan hanya soal “input benar atau salah”, tetapi tentang menjaga kualitas sistem secara menyeluruh: data, security, stability, dan user experience.

Web application yang matang selalu memiliki validation yang:

  • Berlapis
  • Konsisten
  • Terpisah dengan jelas
  • Mudah diuji

Jika validation dianggap remeh, biasanya sistem akan membayar mahal di kemudian hari.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact