Study
Vapor

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.

Editor Latihan

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.