Agora, se quisermos gerar conteúdo mais sofisticado a partir desse endpoint, como uma lista de citações e seus autores, podemos passar a usar o HTML DSL do Ktor. Primeiramente precisamos de mais duas importações, que já fazem parte do projeto porque incluímos a DSL no projeto gerado:
import io.ktor.server.html.*
import kotlinx.html.*
E podemos gerar nossa resposta assim:
routing {
get("/") {
call.respondHtml {
head {
title("Quotes")
}
body {
h1 { +"Quotes to Live By" }
ul {
listOf(
"This Mind is the matrix of all matter." to "Max Planck",
"All religions, arts and sciences are branches of the same tree." to "Albert Einstein",
"The mind is everything. What you think you become." to "Buddha"
).forEach { (quote, author) ->
li {
p { +quote }
p { +"― $author" }
}
}
}
}
Isso usa as funções do construtor HTML do Ktor e mostra um pouco da flexibilidade da sintaxe funcional do Kotlin. As funções DSL que correspondem às tags HTML são facilmente compreensíveis e criamos a mesma estrutura aninhada que faríamos com HTML simples. Entre chaves, definimos o conteúdo aninhado dentro de cada tag. Pode ser mais marcação, texto, variáveis ou alguma combinação.