RestApi

Dáta sem, dáta tam.

Nástroje používateľa

Nástoje správy stránok


kotlin-ktor

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

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
kotlin-ktor.txt · Posledná úprava: od attilajancik