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
Contententsprechen (das aufCodableaufbaut). - 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
CodingKeysundContentConfigurationan. - Validieren Sie Eingaben mit
Validatableund 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
- Routing und Request-Verarbeitung
- Content- und JSON-Codierung
- Fluent ORM und Models
- Middleware und Authentifizierung