Ktor je významný doplnok programovania v Kotlin-e. Zabezpečuje komunikáciu cez API. Vytvára stranu Servera aj Klienta. Komunikácia môže byť na báze HTTP, alebo WebSocket. Ktor využíva Coroutines.
Ktor Server vybuduje API rozhranie pre IP komunikáciu. Pre dátové projekty sa častejšie využije REST API komunikácia, kedy sa protokolom HTTP zasielajú požiadavky (Request) a naspäť sa vracajú odpovede (Response).
Projekt sólo servera s REST API je možné vygenerovať, upraviť a spustiť veľmi jednoducho a použiť napríklad pre testovací Mock server, ktorý pobeží na desktope, alebo mobilných ARM zariadeniach (tablet, telefón, …). Už pri vygenerovaní projektu, build-nutí a spustení je k dispozícii základný programový a funkčný server.
pre JVM (desktopy) sa používa generátor: New Ktor Project a ďalej postupovať podľa popisu nižšie
pre Multiplatform využi IntelliJ Idea - nový MP projekt s Ktor
Server pri príjme požiadavky zabezpečuje Smerovanie (Routing) a podrobné Trasy (Route) k cieľom, Príklad čiastočne funkčného kódu:
routing { route("/") { get("") { call.respondText("Please define path.") } } route("/article") { get { call.respond(repository.allArticles) } get ("/byId/{idArticle}") { call.respond(repository.articleById(call.parameters["idArticle"])) } post { call.receive<article>() /* code for add or update */ } delete("/{id}") { /* code for remove */ } } }
Príklad príkazu curl pre POST a DELETE:
# POST: curl -v --header "Content-Type: application/json" --request POST --data '{"name":"MyTest2","description":"Task for my test2","priority":"High"}' 0.0.0.0:8080/tasks # DELETE: curl -v --request DELETE 0.0.0.0:8080/tasks/MyTest # switch -v showing detail info of response from server
Generovť projekt je možné pomocou web rozhrania, alebo aplikácie Ktor CLI, alebo priamo v IDE.
Vytvorenie projektu na webe Ktor.
Na stránke New Ktor Project po vyplnení mena projektu sa v Configure zvolia parametre (možné ponechať predvolené). Pre pridanie Plugins v spondej tabuľke sa použije Add (možné bez ponechať výberu), ale každopádne je vhodné zmapovať pluginy pre ich budúce použitie. Preview poskyruje náhľad na štruktúru projektu.
Nakoniec sa projekt stiahne a uloží pomocou Download. Potom už postačuje ZIP rozbaliť na vhodné miesto.
- Generátor je vhodné použiť, ak nie je dostupné profi IDE s možnosťou generovania projektu Ktor.
- Zároveň je možné vygenerovaný projekt spravovať v ľahších IDE (VSC, …)
Ak je projekt pripravený, tak sa ďalej bude pracovať v jeho zložke. (Príkazy sú vhodné pre Shell ktorý je aj vo Windows…)
cd ~/<pathToMyProject>
Nastaviť skript ako spustiteľný:
chmod +x ./gradlew
Zostavenie projektu:
./gradlew build
Spustenie projektu:
./gradlew run
Overenie funkčnosti v prehliadači na adrese: http://0.0.0.0:8080
cd ~/<pathToMyProject> open -na "IntelliJ IDEA CE.app" . # open my project if IDE is in /Applications/
prípadne:
open -a "IntelliJ IDEA CE.app" .
alebo skrátene za predpokladu správnej konfigurácie Path:
idea .
Predpokladá sa že už je nainštalovaný Homebrew
Inštalácia Ktor CLI:
brew install ktor
Vytvorenie projektu:
mkdir ~/MyKtorProjects cd ~/MyKtorProjects brew upgrade ktor ktor new cd <ktorSample> chmod +x ./gradlew ./gradlew build ./gradlew run
Pre výber doplnkov použi šípky, tabelátor a enter. Vytvorenie : Ctrl+G
ipconfig getifaddr en0 # ipv4 only # or ifconfig | grep "inet " | grep -v 127.0.0.1; # other IP of device # other curl ifconfig.me # ipv6 # see more for curl command: https://curl.se/
Pri testovaní je vhdoné vytvoriť @Test funkcie pre všetky trasy. Test beží v oddelenom priestore od servera. Pre test je nutné vytvoriť zložky test/kotlin v src (vedľa main).
KtorIo : Pridanie pluginu StatusPage
Ak doplnuk StatusPage nebol vybraný a pridaný pri tvorbe projektu, potom je vhodné ho pridať manuálne.
KtorIo : Ako vytvoriť RESTful API v Kotlin s Ktor - nový projekt s vybranými doplnkami: Routing, Content Negotiation, Kotlinx.serialization, Static Content
RESTful API komunikuje JSON formátom dát. Teda neprijíma telo odoslané pomocou submit v HTML a taktiež pre zobrazenie výsledku nevytvára statický HTML obsah stránky, ako v príkladoch vyššie.
Accept (jeden či viac typov, napríklad: text/html, application/xhtml+xml, application/xml;q=0.9, image/avif, image/webp,image/apng, */*;q=0.8, application/signed-exchange;v=b3;q=0.7).KtorIo : interaktívna web stránka s Ktor a Thymeleaf