Kotlin Academy · Lektion

Routing og typede parametre

Definér routes med sti- og query-parametre, og gruppér dem med route-blokke.

Lektion 2 af 413 trin

Routing og typede parametre er en gratis Kotlin Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Kotlin Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Grundlæggende routing i Ktor

Routing i Ktor er et plugin, der installeres via install(Routing) { ... } eller kortformen routing { ... }. Ruter defineres ved hjælp af funktioner for HTTP-metoderne: get, post, put, delete, patch.

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

Stiparametre

Definér en stiParameter med {name}. Få adgang til den via call.parameters["name"]. Værdien er altid 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

Markér et segment som valgfrit ved at tilføje ?: {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")
}

Konvertering af parametre til typer

Konvertér stiparametre til værdier med bestemte typer ved hjælp af udvidelsesfunktioner på Parameters. Ktor har indbyggede hjælpefunktioner, eller du kan skrive dine egne:

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

Forespørgselsparametre

Få adgang til parametre i forespørgselsstrengen via call.request.queryParameters["key"]. Flere værdier for den samme nøgle er tilgængelige 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")
}

Gruppering af ruter

Gruppér relaterede ruter under et fælles præfiks ved hjælp af route("/prefix") { ... }. Det reducerer gentagelser og gør routing-træet let at læse:

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

Organisering af ruter i funktioner

Uddrag rutegrupper til udvidelsesfunktioner på Route for at holde routing-konfigurationen modulær:

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

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

Håndtering af anmodningsindhold

Modtag anmodningsindhold som tekst, bytes eller et deserialiseret objekt (kræver ContentNegotiation-pluginet). Brug call.receive() til deserialisering med en bestemt type:

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

Svar med statuskoder

Brug call.respond(status, body) for fuld kontrol, eller de praktiske metoder 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)
}

Wildcard- og tailcard-ruter

Brug * til ét wildcard-segment og {...} (tailcard) til at matche resten af stien som én parameter:

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

Ruteprioriteter

Ktor evaluerer ruter i den rækkefølge, de er deklareret. Mere specifikke ruter skal deklareres før wildcard-ruter. Når to ruter matcher, vinder det første match.

Hurtigt tjek

Hvordan grupperer du flere ruter under et fælles URL-præfiks i Ktor?

Opsummering: Routing og typede parametre

Vigtigste pointer:

  • Definér ruter med get, post osv. inde i routing { }
  • Stiparametre: {name} — få adgang via call.parameters["name"]
  • Forespørgselsparametre: call.request.queryParameters["key"]
  • Gruppér ruter med route("/prefix") { }, og udtræk dem til udvidelsesfunktioner på Route
  • Modtag indhold med en bestemt type via call.receive() (kræver ContentNegotiation)
Gratis at komme i gang

Lær Kotlin med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Routing og typede parametre” gratis?

Ja — alle 3 lektioner i læringssporet Kotlin Academy, inklusive “Routing og typede parametre”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Routing og typede parametre”?

Definér routes med sti- og query-parametre, og gruppér dem med route-blokke. Du øver dig i Kotlin Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Kotlin Academy?

Der kræves ingen tidligere erfaring. Kotlin Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Routing og typede parametre”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Kotlin Academy-lektion?

Ja. Alle Kotlin Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Ktor-projektopsætning: embeddedServer og Application-moduler
  2. Routing og typede parametre
  3. Content Negotiation og kotlinx.serialization
  4. Authentication-plugins: JWT og sessioner
← Tilbage til Kotlin Academy