Decode Request Body dengan Codable
Penjelasan
Saat client mengirim data lewat POST/PUT (biasanya JSON di body), Vapor menyediakan req.content.decode(TipeStruct.self) untuk otomatis mem-parsing body itu jadi instance struct Swift yang conform ke protocol Content (turunan dari Codable dengan tambahan kemampuan encode/decode HTTP). Kalau body tidak sesuai skema struct (field wajib hilang, tipe salah), decode akan melempar error otomatis yang oleh Vapor diubah jadi response 400 Bad Request — kamu tidak perlu menangani validasi format dasar secara manual. Struct yang dipakai untuk body biasanya dipisah dari model database (dibahas di topik Fluent), supaya API punya bentuk input yang stabil meskipun struktur database berubah.
Contoh Konsep
import Vapor
struct BuatCatatanRequest: Content {
var judul: String
var isi: String
}
func routes(_ app: Application) throws {
app.post("catatan") { req -> String in
let input = try req.content.decode(BuatCatatanRequest.self)
return "Catatan diterima: \(input.judul)"
}
}
Praktikum
Buat struct LoginRequest: Content dengan field email dan password (keduanya String). Buat route app.post("login") yang men-decode LoginRequest dan mengembalikan String "Login untuk: <email>".
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
decode() bersifat throwing — pastikan handler-mu ditandai throws (atau memakai try) supaya error decode otomatis ditangani Vapor jadi response 400, bukan menyebabkan crash.