0Pricing
Swift Academy · Lektion

Content- und JSON-Codierung

Decodieren und encodieren Sie Request- und Response-Bodies.

Content- und JSON-Codierung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Das Content-Protokoll

Modelle, die über HTTP übertragen werden, entsprechen in Vapor dem Protokoll Content. Content baut auf Swifts Codable auf und ermöglicht zusätzlich, Daten automatisch aus Anfrage-Bodys zu decodieren und in Antworten zu codieren.

import Vapor

struct Todo: Content {
    var id: Int?
    var title: String
    var done: Bool
}

Eine Antwort als JSON codieren

Geben Sie aus einem Handler einen beliebigen Content-Wert zurück. Vapor codiert ihn als JSON und setzt für Sie den korrekten Content-Type-Header.

app.get("todo") { req -> Todo in
    Todo(id: 1, title: "Learn Vapor", done: false)
}

Einen Anfrage-Body decodieren

Lesen Sie mit req.content.decode(_:) eine typisierte Nutzlast aus einer eingehenden Anfrage. Vapor prüft den Content-Type und verarbeitet die Anfrage entsprechend als JSON (oder Formulardaten).

app.post("todo") { req -> Todo in
    let incoming = try req.content.decode(Todo.self)
    return incoming
}

Arrays als Content

Sammlungen von Content-Typen werden automatisch als JSON-Arrays codiert. Geben Sie [Todo] zurück, erhält der Client eine JSON-Liste.

app.get("todos") { req -> [Todo] in
    [Todo(id: 1, title: "A", done: false),
     Todo(id: 2, title: "B", done: true)]
}

Benutzerdefinierte Coding Keys

Da Content dem Protokoll Codable entspricht, können Sie Swift-Eigenschaftsnamen mit CodingKeys auf andere JSON-Schlüssel abbilden – besonders nützlich für snake_case-APIs.

struct User: Content {
    var firstName: String
    enum CodingKeys: String, CodingKey {
        case firstName = "first_name"
    }
}

Den JSON-Encoder konfigurieren

Über ContentConfiguration können Sie eine globale Codierungsstrategie festlegen, zum Beispiel alle Schlüssel in snake_case umwandeln oder Datumsangaben als ISO-8601 formatieren.

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
encoder.dateEncodingStrategy = .iso8601
ContentConfiguration.global.use(encoder: encoder, for: .json)

Decodierte Inhalte validieren

Mit dem Vapor-Protokoll Validatable können Sie Validierungsregeln deklarieren. Rufen Sie vor dem Decodieren try Todo.validate(content: req) auf, um ungültige Eingaben mit einem eindeutigen 400-Fehler zurückzuweisen.

extension Todo: Validatable {
    static func validations(_ v: inout Validations) {
        v.add("title", as: String.self, is: !.empty)
    }
}

Validierung in einem Handler verwenden

Validieren Sie zuerst und decodieren Sie anschließend. Wenn die Validierung fehlschlägt, löst Vapor automatisch einen Fehler aus, und der Client erhält eine aussagekräftige Fehlerantwort.

app.post("todo") { req -> Todo in
    try Todo.validate(content: req)
    return try req.content.decode(Todo.self)
}

Separate DTOs für Anfragen und Antworten

Es ist eine gute Praxis, für Eingaben und Ausgaben getrennte Typen zu verwenden. Beispielsweise kann CreateTodo für Anfragen keine id enthalten, während Todo für Antworten vollständig ist. So wird Ihre API von den internen Modellen entkoppelt.

struct CreateTodo: Content {
    var title: String
}
struct TodoResponse: Content {
    var id: Int
    var title: String
}

Query-Strings codieren

Über denselben Content-Mechanismus können Sie Query-Strings mit req.query.decode(_:) in eine Struktur decodieren – ideal für Filter- und Paginierungsparameter.

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)
}

Benutzerdefinierten Status mit Content zurückgeben

Um sowohl Body als auch Status zu steuern, erstellen Sie eine Response und codieren den Inhalt darin oder geben Sie eine tupelähnliche Konstruktion zurück. Im folgenden Beispiel werden 201 Created und ein JSON-Body gesetzt.

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
}

Kurzer Test: Content und JSON

Testen Sie Ihr Wissen über die Codierung.

Zusammenfassung: Content- und JSON-Codierung

Sie haben gelernt, wie Daten in Vapor übertragen werden:

  • Lassen Sie Modelle dem Protokoll Content entsprechen (das auf Codable aufbaut).
  • Geben Sie Content zurück, um JSON zu codieren, und verwenden Sie req.content.decode, um Bodys zu lesen.
  • Passen Sie Schlüssel und Datumsangaben mit CodingKeys und ContentConfiguration an.
  • Validieren Sie Eingaben mit Validatable und ziehen Sie separate DTOs für Anfragen und Antworten in Betracht.

Häufig gestellte Fragen

Ist die Lektion „Content- und JSON-Codierung“ kostenlos?

Ja — der vollständige Text von „Content- und JSON-Codierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Content- und JSON-Codierung“?

Decodieren und encodieren Sie Request- und Response-Bodies. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Content- und JSON-Codierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Routing und Request-Verarbeitung
  2. Content- und JSON-Codierung
  3. Fluent ORM und Models
  4. Middleware und Authentifizierung
← Zurück zu Swift Academy