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