Kotlin Academy · Leçon

Routage et paramètres typés

Définissez des routes avec des paramètres de chemin et de requête, puis regroupez-les avec des blocs de routes.

Leçon 2 sur 413 étapes

Routage et paramètres typés est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Kotlin Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Kotlin Academy comprend 4 leçons au total.

Notions de base du routage Ktor

Le routage dans Ktor est un module d’extension installé au moyen de install(Routing) { ... } ou de la forme abrégée routing { ... }. Les routes sont définies à l’aide de fonctions correspondant aux méthodes HTTP : get, post, put, delete, patch.

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

Paramètres de chemin

Définissez un paramètre de chemin avec {name}. Accédez-y au moyen de call.parameters["name"]. La valeur est toujours un String? :

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

Segments de chemin facultatifs

Rendez un segment facultatif en lui ajoutant ? : {name?}. Si le segment est absent, call.parameters["name"] renvoie null.

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

Conversion typée des paramètres

Convertissez les paramètres de chemin en valeurs typées au moyen de fonctions d’extension sur Parameters. Ktor fournit des fonctions utilitaires intégrées, mais vous pouvez également écrire les vôtres :

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

Paramètres de requête

Accédez aux paramètres de la chaîne de requête au moyen de call.request.queryParameters["key"]. Plusieurs valeurs pour une même clé sont disponibles au moyen de getAll("key") :

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

Regroupement des routes

Regroupez les routes associées sous un préfixe commun au moyen de route("/prefix") { ... }. Cela réduit les répétitions et rend l’arborescence du routage plus lisible :

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

Organisation des routes dans des fonctions

Extrayez les groupes de routes dans des fonctions d’extension sur Route afin de conserver une configuration du routage modulaire :

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

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

Gestion du corps de la requête

Recevez un corps de requête sous forme de texte, d’octets ou d’objet désérialisé (nécessite le module d’extension ContentNegotiation). Utilisez call.receive<T>() pour effectuer une désérialisation typée :

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

Réponse avec des codes d’état

Utilisez call.respond(status, body) pour un contrôle total, ou les méthodes pratiques call.respondText(), call.respondFile() et 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)
}

Routes à caractère générique et à segment final

Utilisez * pour un segment générique unique et {...} (paramètre final) pour faire correspondre le reste du chemin en tant que paramètre unique :

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

Priorité des routes

Ktor évalue les routes dans l’ordre de leur déclaration. Les routes les plus spécifiques doivent être déclarées avant les caractères génériques. Lorsque deux routes correspondent, la première correspondance l’emporte.

Vérification rapide

Comment regrouper plusieurs routes sous un préfixe d’URL commun dans Ktor ?

Récapitulatif : routage et paramètres typés

Points essentiels :

  • Définissez les routes avec get, post, etc. dans routing { }
  • Paramètres de chemin : {name} — accès au moyen de call.parameters["name"]
  • Paramètres de requête : call.request.queryParameters["key"]
  • Regroupez les routes avec route("/prefix") { } et extrayez-les dans des fonctions d’extension sur Route
  • Recevez des corps typés avec call.receive<T>() (ContentNegotiation est nécessaire)
Gratuit pour commencer

Apprends Kotlin avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
51
Leçons
203

Questions Fréquemment Posées

La leçon « Routage et paramètres typés » est-elle gratuite ?

Oui — le texte complet de « Routage et paramètres typés » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Kotlin Academy, passe à CoddyKit PRO. Le cours Kotlin Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Routage et paramètres typés » ?

Définissez des routes avec des paramètres de chemin et de requête, puis regroupez-les avec des blocs de routes. Tu pratiques Kotlin Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Kotlin Academy ?

Aucune expérience préalable n'est requise. Kotlin Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Routage et paramètres typés » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Kotlin Academy ?

Oui. Chaque leçon Kotlin Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Configuration d’un projet Ktor : embeddedServer et modules d’application
  2. Routage et paramètres typés
  3. Négociation de contenu et kotlinx.serialization
  4. Modules d’authentification : JWT et session
← Retour à Kotlin Academy