0Pricing
Swift Academy · Pelajaran

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 atas Codable).
  • Kembalikan konten untuk mengodekan JSON; gunakan req.content.decode untuk membaca isi permintaan.
  • Sesuaikan kunci/tanggal melalui CodingKeys dan ContentConfiguration.
  • Validasi masukan dengan Validatable dan 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

  1. Perutean dan Penanganan Permintaan
  2. Pengodean Konten dan JSON
  3. ORM Fluent dan Model
  4. Middleware dan Autentikasi
← Kembali ke Swift Academy