Obsah
Ktor
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.
Server
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
Vytvorenie projektu
Generovť projekt je možné pomocou web rozhrania, alebo aplikácie Ktor CLI, alebo priamo v IDE.
Generovanie pomocou web rozhrania
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, …)
Oživenie projektu
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
Otvorenie projektu v IDE IntelliJ IDEA
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 .
Nový projekt pomocou Ktor CLI
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
aktuálna IP adresa PC
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/
Testovanie projektu
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).
Obsluha chýb
KtorIo : Pridanie pluginu StatusPage
Ak doplnuk StatusPage nebol vybraný a pridaný pri tvorbe projektu, potom je vhodné ho pridať manuálne.
RESTful API
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.
- Content Negotiation - skúma typ obsahu request, aby poskytol správny response. Klient HTTP indikuje typ obsahu v hlavičke kľúčom
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).
Testovanie projektu
Web stránka pomocou Kotlin/Ktor
KtorIo : interaktívna web stránka s Ktor a Thymeleaf
