0Pricing
Swift Academy · Lekcja

Kodowanie treści i JSON

Dekodowanie i kodowanie treści żądań oraz odpowiedzi.

Kodowanie treści i JSON to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Protokół Content

Modele Vapor przesyłane przez HTTP implementują protokół Content. Content opiera się na protokole Swift Codable, dodając możliwość automatycznego dekodowania z treści żądań i kodowania w odpowiedziach.

import Vapor

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

Kodowanie odpowiedzi jako JSON

Zwróćcie Państwo dowolną wartość typu Content z handlera, a Vapor zakoduje ją do formatu JSON i samodzielnie ustawi właściwy nagłówek Content-Type.

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

Dekodowanie treści żądania

Odczytajcie Państwo typowany ładunek z przychodzącego żądania za pomocą req.content.decode(_:). Vapor analizuje nagłówek Content-Type i odpowiednio przetwarza JSON (lub dane formularza).

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

Tablice jako Content

Kolekcje typów Content są automatycznie kodowane jako tablice JSON. Zwróćcie Państwo [Todo], a klient otrzyma listę JSON.

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

Niestandardowe klucze kodowania

Ponieważ Content implementuje Codable, mogą Państwo mapować nazwy właściwości Swift na inne klucze JSON za pomocą CodingKeys — jest to przydatne w interfejsach API używających snake_case.

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

Konfigurowanie kodera JSON

Mogą Państwo ustawić globalną strategię kodowania, na przykład konwertowanie wszystkich kluczy do snake_case lub formatowanie dat jako ISO-8601, za pomocą ContentConfiguration.

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

Walidowanie zdekodowanej zawartości

Protokół Validatable Vapor pozwala deklarować reguły walidacji. Wywołajcie Państwo try Todo.validate(content: req) przed dekodowaniem, aby odrzucać nieprawidłowe dane z czytelnym błędem 400.

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

Używanie walidacji w handlerze

Najpierw wykonajcie walidację, a następnie dekodujcie dane. Jeśli walidacja się nie powiedzie, Vapor automatycznie zgłosi błąd, a klient otrzyma opisową odpowiedź z błędem.

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

Oddzielne DTO żądania i odpowiedzi

Dobrą praktyką jest przechowywanie oddzielnych typów danych wejściowych i wyjściowych. Na przykład CreateTodo bez identyfikatora na potrzeby żądań oraz pełnego typu Todo na potrzeby odpowiedzi. Rozdziela to API od modeli wewnętrznych.

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

Kodowanie ciągów zapytań

Ten sam mechanizm Content dekoduje ciągi zapytań do struktury za pomocą req.query.decode(_:), co doskonale sprawdza się w przypadku parametrów filtrowania i stronicowania.

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

Zwracanie niestandardowego statusu z zawartością

Aby kontrolować zarówno treść, jak i status, zbudujcie Państwo obiekt Response i zakodujcie w nim zawartość albo zwróćcie konstrukcję przypominającą krotkę. Poniższy przykład ustawia status 201 Created i treść 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
}

Szybki test: Content i JSON

Sprawdźcie Państwo swoją wiedzę o kodowaniu.

Podsumowanie: Content i kodowanie JSON

Nauczyli się Państwo, jak dane są przesyłane w Vapor:

  • Modele powinny implementować Content (oparty na Codable).
  • Zwracać zawartość, aby zakodować JSON, oraz używać req.content.decode do odczytywania treści żądań.
  • Dostosowywać klucze i daty za pomocą CodingKeys oraz ContentConfiguration.
  • Weryfikować dane wejściowe za pomocą Validatable i rozważyć oddzielne DTO żądań i odpowiedzi.

Często zadawane pytania

Czy lekcja „Kodowanie treści i JSON” jest bezpłatna?

Tak — pełny tekst „Kodowanie treści i JSON” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Kodowanie treści i JSON”?

Dekodowanie i kodowanie treści żądań oraz odpowiedzi. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Kodowanie treści i JSON”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Routing i obsługa żądań
  2. Kodowanie treści i JSON
  3. Fluent ORM i modele
  4. Middleware i uwierzytelnianie
← Powrót do Swift Academy