Pengodean Konten dan JSON
Dekodekan dan kodekan isi permintaan serta respons.
Pengodean Konten dan JSON adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Protokol Content
Model Vapor yang dikirim melalui HTTP harus mengikuti Content. Content dibangun di atas Codable milik Swift, dengan menambahkan kemampuan untuk didekode dari isi permintaan dan dikodekan ke dalam respons secara otomatis.
import Vapor
struct Todo: Content {
var id: Int?
var title: String
var done: Bool
}Mengodekan Respons sebagai JSON
Kembalikan nilai Content apa pun dari penangan, dan Vapor akan mengodekannya menjadi JSON serta menetapkan header Content-Type yang tepat untuk Anda.
app.get("todo") { req -> Todo in
Todo(id: 1, title: "Learn Vapor", done: false)
}Mendekode Isi Permintaan
Baca muatan bertipe dari permintaan yang masuk dengan req.content.decode(_:). Vapor memeriksa Content-Type dan mengurai JSON (atau data formulir) sesuai dengan jenisnya.
app.post("todo") { req -> Todo in
let incoming = try req.content.decode(Todo.self)
return incoming
}Array sebagai Content
Kumpulan tipe Content otomatis dikodekan menjadi array JSON. Kembalikan [Todo], dan klien akan menerima daftar JSON.
app.get("todos") { req -> [Todo] in
[Todo(id: 1, title: "A", done: false),
Todo(id: 2, title: "B", done: true)]
}Kunci Pengodean Kustom
Karena Content adalah Codable, Anda dapat memetakan nama properti Swift ke kunci JSON yang berbeda menggunakan CodingKeys—berguna untuk API snake_case.
struct User: Content {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}Mengonfigurasi Pengode JSON
Anda dapat menetapkan strategi pengodean global, misalnya mengubah semua kunci menjadi snake_case atau memformat tanggal sebagai ISO-8601, melalui ContentConfiguration.
let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
encoder.dateEncodingStrategy = .iso8601
ContentConfiguration.global.use(encoder: encoder, for: .json)Memvalidasi Content yang Didekode
Protokol Validatable milik Vapor memungkinkan Anda mendeklarasikan aturan validasi. Panggil try Todo.validate(content: req) sebelum mendekode untuk menolak masukan yang tidak valid dengan kesalahan 400 yang jelas.
extension Todo: Validatable {
static func validations(_ v: inout Validations) {
v.add("title", as: String.self, is: !.empty)
}
}Menggunakan Validasi dalam Penangan
Lakukan validasi terlebih dahulu, lalu dekode. Jika validasi gagal, Vapor otomatis melempar kesalahan dan klien menerima respons kesalahan yang deskriptif.
app.post("todo") { req -> Todo in
try Todo.validate(content: req)
return try req.content.decode(Todo.self)
}Memisahkan DTO Permintaan dan Respons
Praktik yang baik adalah mempertahankan tipe yang terpisah untuk masukan dan keluaran. Misalnya, CreateTodo tanpa id untuk permintaan, dan Todo lengkap untuk respons. Cara ini memisahkan API Anda dari model internal.
struct CreateTodo: Content {
var title: String
}
struct TodoResponse: Content {
var id: Int
var title: String
}Mengodekan String Kueri
Mekanisme Content yang sama mendekode string kueri menjadi suatu struct melalui req.query.decode(_:), ideal untuk parameter penyaringan/paginasi.
struct Page: Content {
var page: Int?
var size: Int?
}
app.get("items") { req -> String in
let p = try req.query.decode(Page.self)
return "page=" + String(p.page ?? 1)
}Mengembalikan Status Kustom dengan Content
Untuk mengontrol isi dan status sekaligus, bangun Response lalu kodekan konten ke dalamnya, atau kembalikan struktur mirip tupel. Contoh di bawah menetapkan 201 Created dengan isi JSON.
app.post("todo") { req -> Response in
let todo = try req.content.decode(Todo.self)
let res = Response(status: .created)
try res.content.encode(todo)
return res
}Uji Cepat: Content dan JSON
Uji pengetahuan pengodean Anda.
Ringkasan: Pengodean Content dan JSON
Anda telah mempelajari cara data melintasi jaringan dalam Vapor:
- Sesuaikan model dengan
Content(yang dibangun di atasCodable). - Kembalikan konten untuk mengodekan JSON; gunakan
req.content.decodeuntuk membaca isi permintaan. - Sesuaikan kunci/tanggal melalui
CodingKeysdanContentConfiguration. - Validasi masukan dengan
Validatabledan pertimbangkan DTO permintaan/respons yang terpisah.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengodean Konten dan JSON” gratis?
Ya — teks lengkap “Pengodean Konten dan JSON” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengodean Konten dan JSON”?
Dekodekan dan kodekan isi permintaan serta respons. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pengodean Konten dan JSON” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Perutean dan Penanganan Permintaan
- Pengodean Konten dan JSON
- ORM Fluent dan Model
- Middleware dan Autentikasi