====== 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, ...