Study
Vapor

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>".

Editor Latihan

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.