Kotlin Academy · leksjon

Ruting og typede parametere

Definer ruter med bane- og query-parametere, og grupper dem med route-blokker.

Leksjon 2 av 413 trinn

Ruting og typede parametere er en gratis leksjon i Kotlin 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 Kotlin Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.

Grunnleggende ruting i Ktor

Ruting i Ktor er en plugin som installeres via install(Routing) { ... } eller kortformen routing { ... }. Ruter defineres med funksjoner for HTTP-metoder: get, post, put, delete og patch.

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

Stiparametere

Definer en sti-parameter med {name}. Få tilgang til den via call.parameters["name"]. Verdien er alltid en String?:

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

Valgfrie stisegmenter

Gjør et segment valgfritt ved å legge til ?: {name?}. Hvis segmentet mangler, returnerer call.parameters["name"] null.

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

Konvertere parametere til riktige typer

Konverter sti-parametere til verdier med riktige typer ved hjelp av utvidelsesfunksjoner på Parameters. Ktor tilbyr innebygde hjelpefunksjoner, eller man kan skrive egne:

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

Spørringsparametere

Få tilgang til parametere i spørringsstrengen via call.request.queryParameters["key"]. Flere verdier for samme nøkkel er tilgjengelige via getAll("key"):

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

Gruppere ruter

Gruppér relaterte ruter under et felles prefiks med route("/prefix") { ... }. Dette reduserer gjentakelser og gjør rutetreet lettere å lese:

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

Organisere ruter i funksjoner

Trekk ut rutegrupper til utvidelsesfunksjoner på Route for å holde rutekonfigurasjonen modulær:

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

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

Håndtere forespørselsinnhold

Motta innholdet i en forespørsel som tekst, byte eller et deserialisert objekt (krever pluginen ContentNegotiation). Bruk call.receive() for deserialisering til riktig type:

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

Svare med statuskoder

Bruk call.respond(status, body) for full kontroll, eller de praktiske metodene call.respondText(), call.respondFile() og 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)
}

Wildcard- og tailcard-ruter

Bruk * for ett enkelt wildcard-segment og {...} (tailcard) for å matche resten av stien som én enkelt parameter:

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

Ruteprioriteringer

Ktor evaluerer ruter i deklarasjonsrekkefølge. Mer spesifikke ruter bør deklareres før wildcards. Når to ruter samsvarer, vinner den første.

Kort kontroll

Hvordan grupperer man flere ruter under et felles URL-prefiks i Ktor?

Oppsummering: Ruting og typede parametere

Viktigste punkter:

  • Definer ruter med get, post og så videre i routing { }
  • Stiparametere: {name} — få tilgang via call.parameters["name"]
  • Spørringsparametere: call.request.queryParameters["key"]
  • Gruppér ruter med route("/prefix") { }, og trekk dem ut til utvidelsesfunksjoner på Route
  • Motta innhold med riktig type via call.receive() (krever ContentNegotiation)
Gratis å komme i gang

Lær deg Kotlin 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
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Ruting og typede parametere» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Kotlin Academy, inkludert «Ruting og typede parametere», 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 Kotlin Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Ruting og typede parametere»?

Definer ruter med bane- og query-parametere, og grupper dem med route-blokker. Du øver på Kotlin 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 Kotlin Academy?

Ingen tidligere erfaring er nødvendig. Kotlin 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 «Ruting og typede parametere»?

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

Ja. Alle Kotlin 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

  1. Ktor-prosjektoppsett: embeddedServer og Application-moduler
  2. Ruting og typede parametere
  3. Innholdsforhandling og kotlinx.serialization
  4. Autentiseringsplugins: JWT og session
← Tilbake til Kotlin Academy