Validasi Request
Penjelasan
Selain validasi format dasar dari Codable (field wajib ada, tipe cocok), Vapor menyediakan lapisan validasi tambahan lewat protocol Validatable pada struct request. Kamu implementasikan static func validations(_ validations: inout Validations) untuk mendaftarkan aturan tiap field, misalnya .count(3...) untuk panjang minimum karakter, .email untuk format email valid, atau .range(1...5) untuk angka dalam rentang tertentu. Di handler, panggil try TipeRequest.validate(content: req) SEBELUM men-decode, supaya kalau validasi gagal, Vapor otomatis melempar response 400 dengan pesan error yang jelas per field — client tahu persis input mana yang salah, bukan cuma 'bad request' generik.
Contoh Konsep
import Vapor
struct DaftarPenggunaRequest: Content, Validatable {
var nama: String
var email: String
var password: String
static func validations(_ validations: inout Validations) {
validations.add("nama", as: String.self, is: .count(3...))
validations.add("email", as: String.self, is: .email)
validations.add("password", as: String.self, is: .count(8...))
}
}
func routes(_ app: Application) throws {
app.post("daftar") { req -> String in
try DaftarPenggunaRequest.validate(content: req)
let input = try req.content.decode(DaftarPenggunaRequest.self)
return "Pengguna \(input.nama) berhasil didaftarkan"
}
}
Praktikum
Buat struct BuatCatatanRequest: Content, Validatable dengan field judul (String) dan isi (String), lalu tambahkan validasi: judul minimal 3 karakter, isi minimal 10 karakter.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Validate.content(req) hanya memeriksa data mentah di body terhadap aturan — ia TIDAK menggantikan decode(). Kamu tetap perlu memanggil req.content.decode(...) setelahnya untuk benar-benar mendapatkan struct terisi.