10 лучших фреймворков Kotlin для веб-разработки: продвинутый уровень
Kotlin уверенно занял нишу в веб-разработке, предлагая лаконичный синтаксис, полную совместимость с Java и мощную систему типов. Если вы уже освоили основы и ищете инструменты для создания высоконагруженных серверных приложений, микросервисов или асинхронных API, этот обзор — для вас. Мы собрали 10 фреймворков и библиотек, которые помогут выйти на продвинутый уровень. Каждый пункт содержит пример кода и ключевые сценарии использования.
1. Ktor: асинхронность и гибкость
Созданный командой JetBrains, Ktor — это легковесный асинхронный фреймворк, работающий на корутинах. Идеален для микросервисов и REST API.
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.routing.*
import io.ktor.http.*
import io.ktor.server.response.*
fun main() {
embeddedServer(Netty, port = 8080) {
routing {
get("/api/hello") {
call.respondText("Hello, Kotlin!", ContentType.Text.Plain)
}
}
}.start(wait = true)
}
Ktor позволяет подключать только необходимые плагины (сериализация, аутентификация, сжатие), что делает финальный бинарник минимальным.
2. Spring Boot с Kotlin: корпоративный стандарт
Spring Boot остается самым популярным решением для enterprise-разработки. Благодаря Kotlin-расширениям (например, конструкторы бинов через DSL) код становится чище.
@RestController
class UserController(private val userService: UserService) {
@GetMapping("/users/{id}")
suspend fun getUser(@PathVariable id: Long): User {
return userService.findById(id)
}
}
Используйте suspend функции для асинхронности и Kotlin DSL для конфигурации бинов — это сокращает boilerplate на 30-40%.
3. http4k: функциональный подход
http4k — это набор библиотек для создания HTTP-приложений в функциональном стиле. Он вдохновлен Http4J и идеально подходит для тестирования.
import org.http4k.core.*
import org.http4k.server.*
import org.http4k.routing.*
fun main() {
val app: HttpHandler = routes(
"/hello" bind Method.GET to { request: Request ->
Response(Status.OK).body("Hello, ${request.query("name") ?: "World"}")
}
)
app.asServer(SunHttp(8080)).start()
}
Каждый обработчик — чистая функция, что упрощает модульное тестирование без поднятия сервера.
4. Javalin: простота и производительность
Javalin — легковесный фреймворк, похожий на Spark, но с поддержкой корутин. Подходит для быстрого прототипирования и небольших сервисов.
import io.javalin.Javalin
fun main() {
val app = Javalin.create { config ->
config.enableCorsForAllOrigins()
}.start(7000)
app.get("/status") { ctx ->
ctx.json(mapOf("status" to "ok", "uptime" to System.currentTimeMillis()))
}
}
Javalin не навязывает ORM или шаблонизатор — вы сами выбираете стек. Отличный выбор для хакатонов и MVP.
5. Vert.x: реактивный и многопоточный
Vert.x — это реактивный фреймворк, который использует event loop и может обрабатывать миллионы соединений. Kotlin-модули добавляют DSL для корутин.
import io.vertx.kotlin.coroutines.*
import io.vertx.core.Vertx
suspend fun main() {
val vertx = Vertx.vertx()
val server = vertx.createHttpServer()
server.requestHandler { req ->
req.response().end("Hello from Vert.x!")
}
server.listen(8080).await()
}
Используйте await() для корутин — это делает реактивный код похожим на синхронный, но без блокировок.
6. Exposed: ORM для Kotlin
Хотя Exposed — это не веб-фреймворк, а ORM, он незаменим в связке с Ktor или Javalin. Позволяет работать с базами данных через DSL.
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
object Users : Table() {
val id = integer("id").autoIncrement()
val name = varchar("name", 50)
override val primaryKey = PrimaryKey(id)
}
fun main() {
Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")
transaction {
SchemaUtils.create(Users)
Users.insert { it[name] = "Alice" }
val users = Users.selectAll().map { it[Users.name] }
println(users) // [Alice]
}
}
Exposed генерирует типобезопасные запросы, что снижает количество ошибок времени выполнения.
7. KMongo: реактивный MongoDB-драйвер
KMongo — это Kotlin-обертка над официальным MongoDB-драйвером. Добавляет корутины и сериализацию через kotlinx.serialization.
import org.litote.kmongo.*
import org.litote.kmongo.coroutine.*
data class User(val name: String, val age: Int)
suspend fun main() {
val client = KMongo.createClient().coroutine
val database = client.getDatabase("mydb")
val users = database.getCollection<User>()
users.insertOne(User("Bob", 30))
val found = users.findOne(User::name eq "Bob")
println(found)
}
KMongo автоматически маппит data-классы на документы BSON, избавляя от написания мапперов.
8. Kotlinx.html: шаблонизация без JSP
Kotlinx.html — это DSL для генерации HTML на стороне сервера. Работает в связке с Ktor или Spring Boot, заменяя традиционные шаблонизаторы.
import kotlinx.html.*
import kotlinx.html.stream.*
fun main() {
val html = createHTML().html {
head {
title("Kotlin Page")
}
body {
h1 { +"Welcome" }
p { +"This is generated by Kotlin" }
}
}
println(html)
}
Код полностью типобезопасен: вы не сможете случайно закрыть не тот тег или забыть атрибут.