Ktor — первая программа
Ktor — первая программа
Ktor — асинхронный фреймворк от JetBrains для backend и HTTP-клиентов. Построен на корутинах.
База языка: Первая программа на Kotlin. Экосистема: Экосистема Kotlin. Android: мобильный раздел.
Создание проекта
В start.ktor.io выберите:
- Engine: Netty
- Dependencies:
Routing,Content Negotiation,kotlinx-serialization
Или вручную — build.gradle.kts:
plugins {
kotlin("jvm") version "1.9.24"
kotlin("plugin.serialization") version "1.9.24"
application
}
repositories { mavenCentral() }
dependencies {
implementation("io.ktor:ktor-server-core-jvm:2.3.12")
implementation("io.ktor:ktor-server-netty-jvm:2.3.12")
implementation("io.ktor:ktor-server-content-negotiation-jvm:2.3.12")
implementation("io.ktor:ktor-serialization-kotlinx-json-jvm:2.3.12")
implementation("ch.qos.logback:logback-classic:1.5.6")
}
application { mainClass.set("com.example.ApplicationKt") }
Application.kt
package com.example
import io.ktor.serialization.kotlinx.json.*
import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import kotlinx.serialization.Serializable
@Serializable
data class Note(val id: Int, val text: String)
@Serializable
data class NoteCreate(val text: String)
fun main() {
embeddedServer(Netty, port = 8080, module = Application::module).start(wait = true)
}
fun Application.module() {
install(ContentNegotiation) { json() }
val notes = mutableListOf<Note>()
var nextId = 1
routing {
get("/health") {
call.respond(mapOf("status" to "ok"))
}
get("/notes") {
call.respond(notes)
}
post("/notes") {
val body = call.receive<NoteCreate>()
val note = Note(nextId++, body.text)
notes += note
call.respond(note)
}
delete("/notes/{id}") {
val id = call.parameters["id"]?.toIntOrNull()
?: return@delete call.respondText("bad id", status = io.ktor.http.HttpStatusCode.BadRequest)
if (notes.removeIf { it.id == id }) {
call.respondText(status = io.ktor.http.HttpStatusCode.NoContent)
} else {
call.respondText("not found", status = io.ktor.http.HttpStatusCode.NotFound)
}
}
}
}
./gradlew run
Проверка
curl http://127.0.0.1:8080/health
curl http://127.0.0.1:8080/notes
curl -X POST http://127.0.0.1:8080/notes \
-H "Content-Type: application/json" \
-d '{"text":"Изучить Ktor"}'
Плагины (следующий шаг)
| Плагин | Назначение |
|---|---|
Authentication | JWT, Basic |
CORS | браузерные клиенты |
StatusPages | единый обработчик ошибок |
CallLogging | лог запросов |
Альтернатива на JVM: Spring для Kotlin/Java.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История Kotlin - создание языка JetBrains для плавной совместимости с Java и современной разработки. Экосистема Kotlin-приложений - инструменты, фреймворки и мультиплатформенные сценарии разработки. Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Набор советов, правил, принципов и обычаев в разработке на этом языке. Основы Kotlin - архитектура проекта, платформенные модули и базовые принципы разработки на языке. Типизация, набор правил определения типа данных значений языка. Операторы и выражения в Kotlin - логика вычислений, приоритеты операций и идиоматичный стиль записи условий. Циклы и управляющие конструкции в Kotlin - идиоматичные способы итерации, условия и управление выполнением. ООП в Kotlin - классы, модификаторы доступа, наследование и идиоматичное проектирование объектных структур. Кавычки, точки, запятые, скобки и прочие знаки препинания. Kotlin использует набор зарезервированных слов для построения синтаксических конструкций языка. Все ключевые слова разделены на категории по назначению. Набор функций, которые включены в стандартную библиотеку языка.История языка Kotlin
Экосистема Kotlin-приложений
Что требуется знать перед началом изучения языка программирования Kotlin
Рекомендации по разработке на Kotlin
Основы языка Kotlin
Типы данных и объявление переменных
Операторы и выражения в Kotlin
Циклы и управляющие конструкции
Объектно-ориентированное программирование в Kotlin
Синтаксис и пунктуация в Kotlin
Ключевые слова языка Kotlin
Встроенные функции и расширения Kotlin