Innhold og JSON-koding
Dekod og kod forespørsels- og svarlegemer.
Innhold og JSON-koding er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Content-protokollen
Vapor-modeller som sendes over HTTP, samsvarer med Content. Content bygger på Swifts Codable og legger til muligheten til å dekode fra forespørselskropper og automatisk kode innhold i svar.
import Vapor
struct Todo: Content {
var id: Int?
var title: String
var done: Bool
}Kode et svar som JSON
Returner en valgfri Content-verdi fra en handler, så koder Vapor den til JSON og angir riktig Content-Type-hode for Dem.
app.get("todo") { req -> Todo in
Todo(id: 1, title: "Learn Vapor", done: false)
}Dekode en forespørselskropp
Les en typet nyttelast fra en innkommende forespørsel med req.content.decode(_:). Vapor undersøker Content-Type og tolker JSON (eller skjemadata) deretter.
app.post("todo") { req -> Todo in
let incoming = try req.content.decode(Todo.self)
return incoming
}Matriser som Content
Samlinger av Content-typer kodes automatisk som JSON-matriser. Returner [Todo], så mottar klienten en JSON-liste.
app.get("todos") { req -> [Todo] in
[Todo(id: 1, title: "A", done: false),
Todo(id: 2, title: "B", done: true)]
}Egendefinerte kodingsnøkler
Siden Content er Codable, kan De koble Swift-egenskapsnavn til andre JSON-nøkler ved hjelp av CodingKeys — nyttig for snake_case-API-er.
struct User: Content {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}Konfigurere JSON-koderen
De kan angi en global kodingsstrategi, for eksempel å konvertere alle nøkler til snake_case eller formatere datoer som ISO-8601, via ContentConfiguration.
let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
encoder.dateEncodingStrategy = .iso8601
ContentConfiguration.global.use(encoder: encoder, for: .json)Validere dekodet innhold
Vapors Validatable-protokoll lar Dem deklarere valideringsregler. Kall try Todo.validate(content: req) før dekoding for å avvise ugyldige inndata med en tydelig 400-feil.
extension Todo: Validatable {
static func validations(_ v: inout Validations) {
v.add("title", as: String.self, is: !.empty)
}
}Bruke validering i en handler
Valider først, og dekod deretter. Hvis valideringen mislykkes, kaster Vapor automatisk en feil, og klienten mottar et beskrivende feilsvar.
app.post("todo") { req -> Todo in
try Todo.validate(content: req)
return try req.content.decode(Todo.self)
}Skille mellom DTO-er for forespørsel og svar
Det er god praksis å bruke separate typer for inndata og utdata. Bruk for eksempel en CreateTodo uten id for forespørsler og en fullstendig Todo for svar. Da kobles API-et fra de interne modellene.
struct CreateTodo: Content {
var title: String
}
struct TodoResponse: Content {
var id: Int
var title: String
}Kode spørringsstrenger
Den samme Content-mekanismen dekoder spørringsstrenger til en struktur via req.query.decode(_:), noe som er ideelt for filter- og pagineringsparametere.
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)
}Returnere egendefinert status med Content
Hvis De vil kontrollere både kropp og status, kan De bygge en Response og kode innhold i den, eller returnere en tuppelignende konstruksjon. Koden nedenfor angir 201 Created med en JSON-kropp.
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
}Kort kontroll: Content og JSON
Test kunnskapene Deres om koding.
Oppsummering: Content- og JSON-koding
De har lært hvordan data sendes over nettet i Vapor:
- La modeller samsvare med
Content(bygget påCodable). - Returner innhold for å kode JSON, og bruk
req.content.decodetil å lese kropper. - Tilpass nøkler og datoer via
CodingKeysogContentConfiguration. - Valider inndata med
Validatable, og vurder separate DTO-er for forespørsler og svar.
Lær deg Swift med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 122
- Leksjoner
- 409
Ofte stilte spørsmål
Er leksjonen «Innhold og JSON-koding» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «Innhold og JSON-koding», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Innhold og JSON-koding»?
Dekod og kod forespørsels- og svarlegemer. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Swift Academy?
Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Innhold og JSON-koding»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?
Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Ruting og håndtering av forespørsler
- Innhold og JSON-koding
- Fluent ORM og modeller
- Middleware og autentisering