0Pricing
Kotlin Academy · Lekcja

Routing i typowane parametry

Definiuj trasy z parametrami ścieżki i zapytania oraz grupuj je w blokach route.

Routing i typowane parametry to bezpłatna lekcja Kotlin 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 Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Podstawy routingu w Ktor

Routing w Ktorze jest wtyczką instalowaną za pomocą install(Routing) { ... } lub skróconej formy routing { ... }. Trasy definiuje się za pomocą funkcji odpowiadających metodom HTTP: get, post, put, delete, patch.

routing {
    get("/hello") { call.respondText("Hello!") }
    post("/items") { /* handle POST */ }
}

Parametry ścieżki

Parametr ścieżki należy zdefiniować za pomocą {name}. Dostęp do niego uzyskuje się przez call.parameters["name"]. Jego wartość zawsze ma typ String?:

get("/users/{id}") {
    val id = call.parameters["id"] ?: return@get call.respondText("Missing id", status = HttpStatusCode.BadRequest)
    call.respondText("User: $id")
}

Opcjonalne segmenty ścieżki

Segment można oznaczyć jako opcjonalny, dodając ?: {name?}. Jeśli segmentu nie ma, call.parameters["name"] zwraca null.

get("/posts/{slug?}") {
    val slug = call.parameters["slug"]
    if (slug == null) call.respondText("All posts")
    else call.respondText("Post: $slug")
}

Konwersja parametrów do określonych typów

Parametry ścieżki należy konwertować na wartości określonych typów za pomocą funkcji rozszerzających dla Parameters. Ktor udostępnia wbudowane funkcje pomocnicze, można też napisać własne:

get("/items/{id}") {
    val id = call.parameters["id"]?.toLongOrNull()
        ?: return@get call.respond(HttpStatusCode.BadRequest, "Invalid id")
    call.respondText("Item #$id")
}

Parametry zapytania

Do parametrów ciągu zapytania można uzyskać dostęp za pomocą call.request.queryParameters["key"]. Wiele wartości tego samego klucza jest dostępnych przez getAll("key"):

get("/search") {
    val q = call.request.queryParameters["q"] ?: ""
    val page = call.request.queryParameters["page"]?.toIntOrNull() ?: 1
    call.respondText("Search: $q, page $page")
}

Grupowanie tras

Powiązane trasy należy grupować pod wspólnym prefiksem za pomocą route("/prefix") { ... }. Ogranicza to powtórzenia i zwiększa czytelność drzewa routingu:

route("/api/v1") {
    route("/users") {
        get { /* list users */ }
        get("/{id}") { /* get user by id */ }
        post { /* create user */ }
    }
}

Organizowanie tras w funkcjach

Aby zachować modularność konfiguracji routingu, grupy tras należy wyodrębniać do funkcji rozszerzających dla Route:

fun Route.userRoutes() {
    route("/users") {
        get { /* ... */ }
        post { /* ... */ }
        get("/{id}") { /* ... */ }
    }
}

// In Application module:
routing { userRoutes() }

Obsługa treści żądania

Treść żądania można odbierać jako tekst, bajty lub zdeserializowany obiekt (wymaga to wtyczki ContentNegotiation). Do deserializacji z zachowaniem typów należy użyć call.receive<T>():

post("/users") {
    val user = call.receive<UserDto>()
    call.respond(HttpStatusCode.Created, user)
}

Odpowiadanie kodami statusu

Do uzyskania pełnej kontroli należy użyć call.respond(status, body) albo metod pomocniczych call.respondText(), call.respondFile(), call.respond(HttpStatusCode.NotFound):

get("/users/{id}") {
    val user = userRepo.find(call.parameters["id"])
    if (user == null) call.respond(HttpStatusCode.NotFound)
    else call.respond(user)
}

Trasy z symbolami wieloznacznymi i tailcard

Należy użyć * dla pojedynczego segmentu wieloznacznego oraz {...} (tailcard), aby dopasować resztę ścieżki jako pojedynczy parametr:

get("/static/{path...}") {
    val filePath = call.parameters.getAll("path")?.joinToString("/") ?: ""
    call.respondText("Serving: $filePath")
}

Priorytety tras

Ktor ocenia trasy w kolejności ich deklaracji. Bardziej szczegółowe trasy należy deklarować przed trasami wieloznacznymi. Gdy pasują dwie trasy, wygrywa pierwsze dopasowanie.

Szybkie sprawdzenie

Jak grupuje się wiele tras pod wspólnym prefiksem adresu URL w Ktor?

Podsumowanie: Routing i parametry określonych typów

Najważniejsze informacje:

  • Trasy należy definiować za pomocą get, post itd. wewnątrz routing { }
  • Parametry ścieżki: {name} — dostęp przez call.parameters["name"]
  • Parametry zapytania: call.request.queryParameters["key"]
  • Trasy należy grupować za pomocą route("/prefix") { } i wyodrębniać do funkcji rozszerzających dla Route
  • Treści z zachowaniem typów należy odbierać za pomocą call.receive<T>() (wymaga ContentNegotiation)

Często zadawane pytania

Czy lekcja „Routing i typowane parametry” jest bezpłatna?

Tak — pełny tekst „Routing i typowane parametry” 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 Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Routing i typowane parametry”?

Definiuj trasy z parametrami ścieżki i zapytania oraz grupuj je w blokach route. Ćwiczysz Kotlin 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ąć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin 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 „Routing i typowane parametry”?

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 Kotlin Academy?

Tak. Każda lekcja Kotlin 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. Konfiguracja projektu Ktor: embeddedServer i moduły Application
  2. Routing i typowane parametry
  3. Negocjowanie treści i kotlinx.serialization
  4. Wtyczki uwierzytelniania: JWT i sesje
← Powrót do Kotlin Academy