Study
Vapor

Encode JSON Response dengan Codable

Penjelasan

Kebalikan dari decode, untuk mengirim data terstruktur ke client, kamu cukup return struct yang conform ke Content dari handler — Vapor otomatis meng-encode-nya jadi JSON dan mengatur header Content-Type: application/json serta status 200 OK. Ini bekerja juga untuk array ([Struct]) dan tipe opsional. Untuk field yang penamaannya beda antara Swift (camelCase konvensi) dan JSON yang diinginkan (mis. snake_case), kamu bisa menambahkan CodingKeys secara manual seperti Codable pada umumnya, atau mengatur JSONEncoder.keyEncodingStrategy secara global di configure.swift.

Contoh Konsep

import Vapor

struct CatatanResponse: Content {
    var id: UUID
    var judul: String
    var isi: String
}

func routes(_ app: Application) throws {
    app.get("catatan", "contoh") { req -> CatatanResponse in
        return CatatanResponse(
            id: UUID(),
            judul: "Belanja",
            isi: "Beli susu dan roti"
        )
    }

    app.get("catatan", "semua") { req -> [CatatanResponse] in
        return [
            CatatanResponse(id: UUID(), judul: "A", isi: "Isi A"),
            CatatanResponse(id: UUID(), judul: "B", isi: "Isi B")
        ]
    }
}

Praktikum

Buat struct PenggunaResponse: Content dengan field nama dan email. Buat route app.get("pengguna", "saya") yang mengembalikan satu instance PenggunaResponse dengan data bebas.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Kalau lupa membuat struct response conform ke Content (atau minimal Codable + ResponseEncodable), Xcode/compiler akan menolak compile dengan pesan bahwa tipe tidak memenuhi protocol yang diharapkan closure route.