Ktor es el servidor HTTP oficial para Kotlin. Aprovecha la concurrencia nativa y el poder expresivo del lenguaje para construir endpoints de forma limpia y eficiente.
Configuración inicial de Ktor ⚙️
Puedes generar un proyecto desde el generador web de Ktor. Asegúrate de incluir la HTML DSL.
Una vez descargado, simplemente ejecuta:
./gradlew run
Al acceder a localhost:8080, recibirás el mensaje “Hello, World!”.
Definiendo rutas
Ejemplo de ruta básica:
routing {
get("/") {
call.respondText("Hello World!")
}
}
call.respondText()devuelve texto plano.get("/")define una solicitud GET en la raíz.routingagrupa las rutas de la aplicación.
Generación de HTML con la DSL de Kotlin
Puedes usar la DSL de Ktor para generar HTML de forma declarativa:
call.respondHtml {
body {
h1 { +"Frases célebres" }
ul {
listOf(...).forEach { (frase, autor) ->
li {
p { +frase }
p { +"― $autor" }
}
}
}
}
}
Cada etiqueta HTML tiene su correspondiente función en Kotlin. Es posible mezclar lógica y estructura de forma clara y legible.
Parámetros en las rutas
Ejemplo de ruta con parámetro opcional:
get("/quotes/{author?}") {
val author = call.parameters["author"]
val filtradas = if (author != null) {
quotes.filter { it.second.equals(author, ignoreCase = true) }
} else {
quotes
}
call.respondHtml { ... }
}
Esto permite filtrar las frases por autor desde la URL.
Manejo de formularios y solicitudes POST
Formulario HTML:
get("/add-quote") {
call.respondHtml {
form(method = FormMethod.post, action = "/quotes") {
textInput(name = "quote") {}
textInput(name = "author") {}
submitInput { +"Agregar frase" }
}
}
}
Manejo del POST:
post("/quotes") {
val params = call.receiveParameters()
val quote = params["quote"] ?: ""
val author = params["author"] ?: ""
quotes.add(quote to author)
call.respondRedirect("/quotes")
}
Plugins y registro de peticiones
Puedes crear un plugin personalizado para registrar las peticiones entrantes:
val RequestLoggingPlugin = createApplicationPlugin("RequestLoggingPlugin") {
onCall { call ->
println("URL solicitada: ${call.request.local.uri}")
}
}
Se instala en el module de la aplicación:
fun Application.module() {
configureRouting()
install(RequestLoggingPlugin)
}
Conclusión
Ktor es un servidor HTTP moderno y eficaz, diseñado para aprovechar las ventajas del lenguaje Kotlin. Su sintaxis clara y su arquitectura extensible lo convierten en una opción poderosa para el desarrollo web.
En el próximo artículo se cubrirá la persistencia de datos y el uso de HTMX para crear interfaces dinámicas sin JavaScript complejo.