Reititys ja tyypitetyt parametrit
Määrittäkää reittejä polku- ja kyselyparametreilla ja ryhmitelkää ne route-lohkoilla.
Reititys ja tyypitetyt parametrit on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Reitityksen perusteet Ktorissa
Reititys Ktorissa on laajennus, joka asennetaan kutsulla install(Routing) { ... } tai lyhytmuodolla routing { ... }. Reitit määritetään HTTP-metodifunktioilla: get, post, put, delete ja patch.
routing {
get("/hello") { call.respondText("Hello!") }
post("/items") { /* handle POST */ }
}Polkuparametrit
Määritä polkuparametri käyttämällä muotoa {name}. Käytä sitä call.parameters["name"]-haulla. Arvo on aina tyyppiä String?:
get("/users/{id}") {
val id = call.parameters["id"] ?: return@get call.respondText("Missing id", status = HttpStatusCode.BadRequest)
call.respondText("User: $id")
}Valinnaiset polkusegmentit
Merkitse segmentti valinnaiseksi lisäämällä ?: {name?}. Jos segmentti puuttuu, call.parameters["name"] palauttaa arvon null.
get("/posts/{slug?}") {
val slug = call.parameters["slug"]
if (slug == null) call.respondText("All posts")
else call.respondText("Post: $slug")
}Parametrien muuntaminen tyypeiksi
Muunna polkuparametrit tyypitetyiksi arvoiksi Parameters-tyypin laajennusfunktioilla. Ktor tarjoaa sisäänrakennettuja apufunktioita, tai voit kirjoittaa omasi:
get("/items/{id}") {
val id = call.parameters["id"]?.toLongOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Invalid id")
call.respondText("Item #$id")
}Kyselyparametrit
Käytä kyselymerkkijonon parametreja haulla call.request.queryParameters["key"]. Saman avaimen useat arvot ovat käytettävissä kutsulla getAll("key"):
get("/search") {
val q = call.request.queryParameters["q"] ?: ""
val page = call.request.queryParameters["page"]?.toIntOrNull() ?: 1
call.respondText("Search: $q, page $page")
}Reittien ryhmittely
Ryhmittele toisiinsa liittyvät reitit yhteisen etuliitteen alle käyttämällä muotoa route("/prefix") { ... }. Tämä vähentää toistoa ja tekee reitityspuusta helposti luettavan:
route("/api/v1") {
route("/users") {
get { /* list users */ }
get("/{id}") { /* get user by id */ }
post { /* create user */ }
}
}Reittien järjestäminen funktioihin
Siirrä reittiryhmät Route-tyypin laajennusfunktioihin, jotta reititysmääritykset pysyvät modulaarisina:
fun Route.userRoutes() {
route("/users") {
get { /* ... */ }
post { /* ... */ }
get("/{id}") { /* ... */ }
}
}
// In Application module:
routing { userRoutes() }Pyynnön rungon käsittely
Vastaanota pyynnön runko tekstinä, tavuina tai deserialisoituna oliona (edellyttää ContentNegotiation-laajennusta). Käytä tyypitettyyn deserialisointiin kutsua call.receive:
post("/users") {
val user = call.receive<UserDto>()
call.respond(HttpStatusCode.Created, user)
}Vastaaminen tilakoodeilla
Käytä kutsua call.respond(status, body), kun tarvitset täyden hallinnan, tai käteviä metodeja call.respondText(), call.respondFile() ja 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)
}Jokeri- ja tailcard-reitit
Käytä merkkiä * yksittäisen jokerisegmentin käsittelemiseen ja muotoa {...} (tailcard) täsmäämään polun loppuosaan yhtenä parametrina:
get("/static/{path...}") {
val filePath = call.parameters.getAll("path")?.joinToString("/") ?: ""
call.respondText("Serving: $filePath")
}Reittien prioriteetit
Ktor käsittelee reitit niiden määrittelyjärjestyksessä. Määritä tarkemmat reitit ennen jokerireittejä. Kun kaksi reittiä täsmää, ensimmäinen osuma voittaa.
Pikatarkistus
Miten Ktorissa ryhmitellään useita reittejä yhteisen URL-etuliitteen alle?
Kertaus: reititys ja tyypitetyt parametrit
Keskeiset opit:
- Määritä reitit
get-,post- ja muilla funktioilla lohkonrouting { }sisällä - Polkuparametrit:
{name}— käytä niitä haullacall.parameters["name"] - Kyselyparametrit:
call.request.queryParameters["key"] - Ryhmittele reitit muodolla
route("/prefix") { }ja siirrä neRoute-tyypin laajennusfunktioihin - Vastaanota tyypitettyjä runkoja kutsulla
call.receive(edellyttää ContentNegotiation-laajennusta)()
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Reititys ja tyypitetyt parametrit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Reititys ja tyypitetyt parametrit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Reititys ja tyypitetyt parametrit”?
Määrittäkää reittejä polku- ja kyselyparametreilla ja ryhmitelkää ne route-lohkoilla. Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Reititys ja tyypitetyt parametrit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Kotlin Academy-oppitunnilla?
Kyllä. Jokainen Kotlin Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Ktor-projektin määritys: embeddedServer ja Application-moduulit
- Reititys ja tyypitetyt parametrit
- Sisällön neuvottelu ja kotlinx.serialization
- Todennusliitännäiset: JWT ja istunto