Roteamento e parâmetros tipados
Defina rotas com parâmetros de caminho e consulta e agrupe-as com blocos de rota.
Roteamento e parâmetros tipados é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
Fundamentos do roteamento no Ktor
O roteamento no Ktor é um plug-in instalado por meio de install(Routing) { ... } ou da forma abreviada routing { ... }. As rotas são definidas usando funções correspondentes aos métodos HTTP: get, post, put, delete, patch.
routing {
get("/hello") { call.respondText("Hello!") }
post("/items") { /* handle POST */ }
}Parâmetros de caminho
Defina um parâmetro de caminho com {name}. Acesse-o por meio de call.parameters["name"]. O valor é sempre um String?:
get("/users/{id}") {
val id = call.parameters["id"] ?: return@get call.respondText("Missing id", status = HttpStatusCode.BadRequest)
call.respondText("User: $id")
}Segmentos opcionais do caminho
Marque um segmento como opcional adicionando ?: {name?}. Se o segmento estiver ausente, call.parameters["name"] retornará null.
get("/posts/{slug?}") {
val slug = call.parameters["slug"]
if (slug == null) call.respondText("All posts")
else call.respondText("Post: $slug")
}Conversão de parâmetros tipados
Converta parâmetros de caminho em valores tipados usando funções de extensão em Parameters. O Ktor fornece auxiliares integrados, mas você também pode escrever os seus:
get("/items/{id}") {
val id = call.parameters["id"]?.toLongOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Invalid id")
call.respondText("Item #$id")
}Parâmetros de consulta
Acesse os parâmetros da cadeia de consulta por meio de call.request.queryParameters["key"]. Vários valores para a mesma chave ficam disponíveis por meio 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")
}Agrupamento de rotas
Agrupe rotas relacionadas sob um prefixo comum usando route("/prefix") { ... }. Isso reduz a repetição e torna a árvore de roteamento mais legível:
route("/api/v1") {
route("/users") {
get { /* list users */ }
get("/{id}") { /* get user by id */ }
post { /* create user */ }
}
}Organizando rotas em funções
Extraia grupos de rotas para funções de extensão em Route a fim de manter a configuração de roteamento modular:
fun Route.userRoutes() {
route("/users") {
get { /* ... */ }
post { /* ... */ }
get("/{id}") { /* ... */ }
}
}
// In Application module:
routing { userRoutes() }Lidando com o corpo da requisição
Receba o corpo de uma requisição como texto, bytes ou um objeto desserializado (isso requer o plug-in ContentNegotiation). Use call.receive para a desserialização tipada:
post("/users") {
val user = call.receive<UserDto>()
call.respond(HttpStatusCode.Created, user)
}Respondendo com códigos de status
Use call.respond(status, body) para ter controle total ou os métodos de conveniência 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)
}Rotas curinga e de captura do restante do caminho
Use * para um único segmento curinga e {...} (captura do restante do caminho) para corresponder ao restante do caminho como um único parâmetro:
get("/static/{path...}") {
val filePath = call.parameters.getAll("path")?.joinToString("/") ?: ""
call.respondText("Serving: $filePath")
}Prioridades das rotas
O Ktor avalia as rotas na ordem em que são declaradas. As rotas mais específicas devem ser declaradas antes das rotas curinga. Quando duas rotas correspondem, a primeira correspondência vence.
Verificação rápida
Como agrupar várias rotas sob um prefixo de URL comum no Ktor?
Recapitulação: roteamento e parâmetros tipados
Principais conclusões:
- Defina rotas com
get,postetc. dentro derouting { } - Parâmetros de caminho:
{name}— acesse-os por meio decall.parameters["name"] - Parâmetros de consulta:
call.request.queryParameters["key"] - Agrupe rotas com
route("/prefix") { }e extraia-as para funções de extensão emRoute - Receba corpos tipados com
call.receive(requer ContentNegotiation)()
Aprenda Kotlin com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 51
- Aulas
- 203
Perguntas Frequentes
A aula “Roteamento e parâmetros tipados” é grátis?
Sim — o texto completo de “Roteamento e parâmetros tipados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “Roteamento e parâmetros tipados”?
Defina rotas com parâmetros de caminho e consulta e agrupe-as com blocos de rota. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Roteamento e parâmetros tipados”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Kotlin Academy?
Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Configuração de projeto Ktor: embeddedServer e módulos de aplicação
- Roteamento e parâmetros tipados
- Negociação de conteúdo e kotlinx.serialization
- Plugins de autenticação: JWT e sessão