Kotlin Academy · Oppitunti

Reititys ja tyypitetyt parametrit

Määrittäkää reittejä polku- ja kyselyparametreilla ja ryhmitelkää ne route-lohkoilla.

Oppitunti 2/413 vaihetta

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 lohkon routing { } sisällä
  • Polkuparametrit: {name} — käytä niitä haulla call.parameters["name"]
  • Kyselyparametrit: call.request.queryParameters["key"]
  • Ryhmittele reitit muodolla route("/prefix") { } ja siirrä ne Route-tyypin laajennusfunktioihin
  • Vastaanota tyypitettyjä runkoja kutsulla call.receive() (edellyttää ContentNegotiation-laajennusta)
Aloita maksutta

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

  1. Ktor-projektin määritys: embeddedServer ja Application-moduulit
  2. Reititys ja tyypitetyt parametrit
  3. Sisällön neuvottelu ja kotlinx.serialization
  4. Todennusliitännäiset: JWT ja istunto
← Takaisin: Kotlin Academy