Kotlin Academy · Aula

Roteamento e parâmetros tipados

Defina rotas com parâmetros de caminho e consulta e agrupe-as com blocos de rota.

Aula 2 de 413 etapas

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, post etc. dentro de routing { }
  • Parâmetros de caminho: {name} — acesse-os por meio de call.parameters["name"]
  • Parâmetros de consulta: call.request.queryParameters["key"]
  • Agrupe rotas com route("/prefix") { } e extraia-as para funções de extensão em Route
  • Receba corpos tipados com call.receive() (requer ContentNegotiation)
Grátis para começar

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

  1. Configuração de projeto Ktor: embeddedServer e módulos de aplicação
  2. Roteamento e parâmetros tipados
  3. Negociação de conteúdo e kotlinx.serialization
  4. Plugins de autenticação: JWT e sessão
← Voltar para Kotlin Academy