====== Ktor (v2) ======
Tento článok vychádza z pôvodnej [[https://ktor.io/docs/welcome.html|dokumentácie Ktor]] a má za úlohu stručne zrekapitulovať možnosti frameworku Ktor, ktorý je určený pre tvorbu asynchrónnych aplikácií **server** a **klient**.
Pre generovanie projektu Ktor Server a Klient odporúčam využíť web generátor a pre Multiplatform priamo IDE IntelliJ IDEA, prípadne si nainštalovať nástroj Ktor CLI pre generovanie projektu. V Intellij IDEA Ultimate je korektne vygenerovaný Ktor projekt pomocou pluginu **Ktor**.
> generovanie projektu na webe: [[https://start.ktor.io/settings|Ktor Project Generator]]
> generovanie projektu pluginom: [[https://plugins.jetbrains.com/plugin/16008-ktor?_cl=MTsxOzA7WUxVMmxqSnpYbDJmRDM1R3hoTHJRTHlFVXFySDJ3Y0NINXlBRHB5eXo2TzBLZW9xeTJKTERMZEczYTlFdGpMNzs%3D|plugin Ktor]]
> [[https://ktor.io/docs/server-create-a-new-project.html|Vytvorenie, otvorenie a spustenie nového projektu Ktor]]
== inštalácie Ktor CLI: ==
brew update
brew install ktor
ktor new
----
===== Ktor Server =====
KTOR Server je framework na vytváranie backend aplikácií – teda aplikácií, ktoré prijímajú HTTP požiadavky (GET, POST, PUT, DELETE, …), spracujú ich a vrátia odpoveď (JSON, HTML, text, …). Server Ktor čaká, kým ho niekto osloví.
Používa sa napríklad na REST API, mikroservisy, webové aplikácie, autentifikačné služby a podobne.
=== najpoužívanejšie závisloti ===
== gradle.properties ==
ktor_version=3.4.0
== gradle/libs.versions.toml ==
[libraries]
ktor-server-status-pages = { module = "io.ktor:ktor-server-status-pages", version.ref = "ktor" }
== build.gradle.kts : ==
val ktor_version: String by project
dependencies {
implementation(libs.ktor.server.status.pages)
}
----
===== Ktor Klient =====
KTOR Klient je knižnica na posielanie HTTP požiadaviek iným serverom. Používa sa napríklad na volanie REST API, komunikáciu s externými službami, sťahovanie dát a podobne. Klient aktívne oslovuje server.
=== najpoužívanejšie závisloti ===
== gradle.properties ==
ktor_version=3.4.0
== gradle/libs.versions.toml ==
[libraries]
#...
== build.gradle.kts : ==
val ktor_version: String by project
dependencies {
implementation("io.ktor:ktor-client-core:$ktor_version")
implementation("io.ktor:ktor-client-cio:$ktor_version")}
----
===== Kombinácia Ktor Server a Ktor Klient =====
V praxi je to veľmi časté použitie. Takáto aplikácia môže napríklad prijímať požiadavky od používateľov (funguje ako server) a zároveň volať iné API služby (funguje ako klient), teda spojiť odpovede a vrátiť výsledok.
Ak reálny príklad môže poslúžiť napríklad klientská mobilná appka ktorá zavolá vlastný **Ktor Server**, ktorý prijme požiadavku. Potom vo vlastnom backende **Ktor Klient** ju použije na zavolanie externého API (napríklad získanie informácií), ktoré spracuje a vráti klientskej mobilnej aplikácii.
Praktické využitie je napríklad v oblastiach: Mikroservisná architektúra, API Gateway, Backend-for-Frontend (BFF), Proxy server, Autentifikačné servery (napr. overenie tokenu voči inej službe) a podobne.
== Pridanie závislostí pre tento prípad: ==
dependencies {
implementation("io.ktor:ktor-server-core:...")
implementation("io.ktor:ktor-client-core:...")
}
== Praktický kód: ==
val httpClient = HttpClient()
// server - routing a get
routing {
get("/data") {
// klient - volenie a príjatie
val externalResponse = httpClient.get("https://api.example.com/data")
call.respond(externalResponse.bodyAsText())
}
}
----
===== Doplnky projektov Ktor Server a Ktor Klient =====
* HTTP
* Security: Authentication**s**, Sessions, ...
* Routing: Routing, Request Validation, Static Content, Status Pages, ...
* Monitoring
* Serialization: Content Negotiation, kotlinx.serialization, GSON, Jackson
* Templating: Thymeleaf, ...
* Databases: Exposed, Postgres, MongoDB, Kafka
* Frameworks: Koin, Dependency Injection, Koog (AI), ...
* Sockets: Raw Sockets, Raw Secure SSL/TLS Sockets, WebSockets
* Administration: Shutdown URL, ...