Kotlin Academy · Lezione

Routing e parametri tipizzati

Definisca route con parametri del percorso e query parameter e li raggruppi con blocchi route.

Lezione 2 di 413 passaggi

Routing e parametri tipizzati è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.

Nozioni di base sul routing in Ktor

In Ktor, il routing è un plugin installato tramite install(Routing) { ... } oppure tramite la notazione abbreviata routing { ... }. Le route vengono definite utilizzando funzioni per i metodi HTTP: get, post, put, delete, patch.

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

Parametri del percorso

Definisca un parametro del percorso con {name}. Vi acceda tramite call.parameters["name"]. Il valore è sempre un String?:

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

Segmenti facoltativi del percorso

Renda facoltativo un segmento aggiungendo ?: {name?}. Se il segmento è assente, call.parameters["name"] restituisce null.

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

Conversione tipizzata dei parametri

Converta i parametri del percorso in valori tipizzati utilizzando funzioni di estensione su Parameters. Ktor fornisce helper integrati, oppure può scriverne di propri:

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

Parametri di query

Acceda ai parametri della query string tramite call.request.queryParameters["key"]. I valori multipli per la stessa chiave sono disponibili tramite getAll("key"):

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

Raggruppamento delle route

Raggruppi le route correlate sotto un prefisso comune utilizzando route("/prefix") { ... }. In questo modo riduce le ripetizioni e rende leggibile l'albero di routing:

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

Organizzazione delle route in funzioni

Estragga i gruppi di route in funzioni di estensione per Route per mantenere modulare la configurazione del routing:

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

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

Gestione del corpo della richiesta

Riceva il corpo di una richiesta come testo, byte o oggetto deserializzato (è necessario il plugin ContentNegotiation). Utilizzi call.receive() per la deserializzazione tipizzata:

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

Risposta con codici di stato

Utilizzi call.respond(status, body) per avere il pieno controllo, oppure i metodi di utilità 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)
}

Route wildcard e tailcard

Utilizzi * per un singolo segmento wildcard e {...} (tailcard) per fare corrispondere il resto del percorso come un unico parametro:

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

Priorità delle route

Ktor valuta le route nell'ordine in cui sono state dichiarate. Le route più specifiche devono essere dichiarate prima delle wildcard. Quando corrispondono due route, viene utilizzata la prima corrispondenza.

Verifica rapida

Come si raggruppano più route sotto un prefisso URL comune in Ktor?

Riepilogo: routing e parametri tipizzati

Punti chiave:

  • Definisca le route con get, post e così via all'interno di routing { }
  • Parametri del percorso: {name} — vi acceda tramite call.parameters["name"]
  • Parametri di query: call.request.queryParameters["key"]
  • Raggruppi le route con route("/prefix") { } ed estragga i gruppi in funzioni di estensione per Route
  • Riceva corpi tipizzati con call.receive() (richiede ContentNegotiation)
Gratis per iniziare

Impara Kotlin con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
51
Lezioni
203

Domande Frequenti

La lezione «Routing e parametri tipizzati» è gratuita?

Sì — il testo completo di «Routing e parametri tipizzati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.

Cosa imparerò in «Routing e parametri tipizzati»?

Definisca route con parametri del percorso e query parameter e li raggruppi con blocchi route. Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Kotlin Academy?

Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Routing e parametri tipizzati»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?

Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Configurazione di un progetto Ktor: embeddedServer e moduli Application
  2. Routing e parametri tipizzati
  3. Content negotiation e kotlinx.serialization
  4. Plugin di autenticazione: JWT e sessione
← Torna a Kotlin Academy