Routing i obsługa żądań
Definiowanie tras i obsługa żądań HTTP.
Routing i obsługa żądań to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 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.
Czym jest Vapor?
Vapor to popularny serwerowy framework internetowy dla języka Swift, zbudowany na SwiftNIO. Pozwala pisać backendy HTTP — API i witryny — w całości w języku Swift, współdzieląc język, a nawet modele z aplikacją na iOS.
import Vapor
let app = try await Application.make(.detect())Aplikacja i trasy
Obiekt Application jest centralnym elementem serwera Vapor. Rejestrują Państwo na nim trasy: mapowania metody HTTP i ścieżki na handler, który zwraca odpowiedź.
app.get("hello") { req in
"Hello, world!"
}Pomocnicze metody HTTP
Vapor udostępnia pomocniczą metodę dla każdego czasownika HTTP: app.get, app.post, app.put, app.patch i app.delete. Każda z nich przyjmuje składniki ścieżki oraz handler.
app.post("users") { req in
"Created a user"
}
app.delete("users") { req in
"Deleted a user"
}Segmenty ścieżki
Przekażcie Państwo wiele segmentów tekstowych, aby zbudować zagnieżdżone ścieżki. Poniższe wywołanie odpowiada na żądanie GET /api/v1/status.
app.get("api", "v1", "status") { req in
"OK"
}Parametry trasy
Użyjcie Państwo segmentu poprzedzonego dwukropkiem, aby przechwycić dynamiczną wartość. Odczytajcie ją z żądania za pomocą req.parameters.get(_:). Poniżej żądanie /users/42 przechwytuje wartość 42.
app.get("users", ":id") { req -> String in
let id = req.parameters.get("id") ?? "unknown"
return "User id is " + id
}Parametry typowane
Mogą Państwo przekonwertować parametr na konkretny typ, przekazując ten typ do get. Jeśli konwersja się nie powiedzie, Vapor automatycznie zwróci błąd 404, dzięki czemu handlery pozostaną przejrzyste.
app.get("posts", ":id") { req -> String in
let id = try req.parameters.require("id", as: Int.self)
return "Post number " + String(id)
}Parametry zapytania
Elementy zapytania URL można odczytać za pomocą req.query. Dla adresu /search?term=swift mogą Państwo bezpośrednio zdekodować parametr term. Brakujące wartości opcjonalne są po prostu zwracane jako nil.
app.get("search") { req -> String in
let term = try req.query.get(String.self, at: "term")
return "Searching for " + term
}Grupy tras
Powiązane trasy można pogrupować pod wspólnym prefiksem za pomocą app.grouped(...). Pozwala to uniknąć powtarzania składników ścieżki i utrzymać powiązane endpointy razem.
let users = app.grouped("users")
users.get { req in "List users" } // GET /users
users.post { req in "Create user" } // POST /usersZwracanie różnych typów odpowiedzi
Handler może zwracać String, HTTPStatus, niestandardowy typ Content albo w pełni skonstruowaną wartość Response. Vapor wie, jak zakodować każdą z nich w odpowiedzi HTTP.
app.delete("cache") { req -> HTTPStatus in
// clear something
return .noContent // 204
}Zgłaszanie błędów za pomocą Abort
Rzućcie Państwo Abort(_:), aby przerwać obsługę żądania i zwrócić określony status HTTP oraz opcjonalny powód. Vapor przekształci go w przejrzystą odpowiedź JSON z błędem.
app.get("secret") { req -> String in
guard req.headers.first(name: "X-Key") == "open" else {
throw Abort(.forbidden, reason: "Missing key")
}
return "Welcome"
}Handlery asynchroniczne
Vapor 4+ w pełni obsługuje async/await. Oznaczcie Państwo domknięcie handlera jako asynchroniczne i używajcie w nim try await podczas pracy z bazą danych lub siecią.
app.get("ping") { req async throws -> String in
try await Task.sleep(for: .milliseconds(10))
return "pong"
}Szybki test: routing
Sprawdźcie Państwo swoją wiedzę o routingu.
Podsumowanie: routing i obsługa żądań
Mogą już Państwo skonfigurować serwer Vapor:
- Rejestrować trasy za pomocą
app.get/post/put/patch/deletei segmentów ścieżki. - Przechwytywać dynamiczne wartości za pomocą
:parami odczytywać je przezreq.parameters(z określonym typem przy użyciurequire(_:as:)). - Odczytywać elementy zapytania z
req.queryi grupować trasy za pomocągrouped. - Zwracać ciągi tekstowe, statusy lub zawartość, zgłaszać błędy za pomocą
Aborti używać asynchronicznych handlerów.
Ucz się Swift dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 122
- Lekcje
- 409
Często zadawane pytania
Czy lekcja „Routing i obsługa żądań” jest bezpłatna?
Tak — pełny tekst „Routing i obsługa żądań” 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 „Routing i obsługa żądań”?
Definiowanie tras i obsługa żądań HTTP. Ć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 1 z 4.
Ile czasu zajmuje lekcja „Routing i obsługa żądań”?
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
- Routing i obsługa żądań
- Kodowanie treści i JSON
- Fluent ORM i modele
- Middleware i uwierzytelnianie