Kotlin s Ktorom

1. Pregled

Ktor je okvir za izgradnju asinkronih poslužitelja i klijenata u povezanim sustavima pomoću moćnog programskog jezika Kotlin. Omogućuje razvoj samostalne aplikacije s ugrađenim poslužiteljima.

U ovom uputstvu istražit ćemo kako stvoriti samostalnu poslužiteljsku aplikaciju pomoću Ktora.

2. Postavljanje Ktor aplikacije

Krenimo s postavljanjem projekta Ktor. Koristit ćemo Gradle što je preporučeni i jednostavan pristup. Gradle se može instalirati slijedeći upute na Gradle web mjesto.

Stvorite graditi.gradle datoteka:

grupa 'com.baeldung.kotlin' verzija '1.0-SNAPSHOT' buildscript {ext.kotlin_version = '1.2.40' ext.ktor_version = '0.9.2' spremišta {mavenCentral ()} ovisnosti {classpath "org.jetbrains.kotlin: kotlin-gradle-plugin: $ kotlin_version "}} primijeni dodatak: 'java' primijeni dodatak: 'kotlin' primijeni dodatak: 'application' mainClassName = 'APIServer.kt' sourceCompatibility = 1.8 compileKotlin {kotlinOptions.jvmTarget =" 1.8 "} compileTestKotlin {kotlinOptions.jvmTarget = "1.8"} kotlin {eksperimentalne {podprograme "omogućiti"}} spremišta {mavenCentral () jcenter () maven {url "//dl.bintray.com/kotlin/ktor"}} ovisnosti {compile "io .ktor: ktor-server-netty: $ ktor_version "compile" ch.qos.logback: logback-classic: 1.2.1 "testCompile group: 'junit', name: 'junit', version: '4.12'}

Uvezli smo Ktor i paket poslužitelja Ktor netty. Netty je ugrađeni poslužitelj koji ćemo koristiti u ovom primjeru.

3. Izgradnja poslužitelja

Našu aplikaciju stvaramo dodavanjem koda u izvornu mapu src / main / kotlin.

Ovdje kreiramo datoteku APIServer.kt glavnom metodom:

zabavno glavno (args: Array) {} 

Dalje kreiramo i pokrećemo ugrađeni Netty poslužitelj:

embeddedServer (Netty, 8080) {} .start (pričekati = točno) 

Stvorit će i pokrenuti poslužitelj u luci 8080. Mi smo postavili čekati = istina u početak() metoda za preslušavanje veza.

4. Izgradnja API-ja

Dodajmo API. Za obradu HTTP zahtjeva, Ktor pruža Usmjeravanje značajka.

Aktiviramo Značajka usmjeravanja s an instalirati blok gdje možemo definirati rute za određene staze i HTTP metode:

val jsonResponse = "" "{" id ": 1," task ":" Platite račun za vodu "," description ":" Platite račun za vodu danas ",}" "" embeddedServer (Netty, 8080) {install (Routing) {get ("/ todo") {call.respoText (jsonResponse, ContentType.Application.Json)}}} .start (pričekajte = točno)

U ovom primjeru poslužitelj će obraditi a DOBITI zahtjev za stazom /napraviti i odgovorit će s napraviti JSON objekt. U odjeljku ćemo saznati više o instaliranju značajki Instaliranje značajki.

5. Pokretanje poslužitelja

Da bismo pokrenuli poslužitelj, potreban nam je zadatak pokretanja u Gradleu:

zadatak runServer (tip: JavaExec) {main = 'APIServer' classpath = sourceSets.main.runtimeClasspath} 

Da bismo pokrenuli poslužitelj, nazivamo ovaj zadatak:

./gradlew runServer 

Izlaznom API-ju se tada može pristupiti putem // localhost: 8080 / todo.

6. Instaliranje značajki

Ktor aplikacija obično se sastoji od niza značajki. Značajke bismo mogli smatrati funkcionalnošću koja se ubrizgava u cjevovod zahtjeva i odgovora.

Koristiti Zadane glave značajku, možemo dodati zaglavlja svakom odlaznom odgovoru. Usmjeravanje je još jedna značajka koja nam omogućuje definiranje ruta za obradu zahtjeva itd.

Također možemo razviti naše značajke i instalirati ih.

Pogledajmo dodavanjem prilagođenog zaglavlja svakom zahtjevu instaliranjem datoteke Zadane glave značajka:

install (DefaultHeaders) {header ("X-Developer", "Baeldung")}

Slično tome, možemo nadjačati zadana zaglavlja postavljena samim okvirom Ktor:

install (DefaultHeaders) {header (HttpHeaders.Server, "Moj poslužitelj")}

Popis dostupnih zadanih zaglavlja može se naći u klasi io.ktor.features.DefaultHeaders.

7. Posluživanje JSON-a

Ručno izgraditi stringificirani JSON nije lako. Ktor nudi značajku koja služi objektima podataka kao JSON pomoću Gsona.

Dodajmo ovisnost Gson u naš graditi.gradle:

sastaviti "io.ktor: ktor-gson: $ ktor_version"

Na primjer, koristimo podatkovni objekt s imenom Autor:

klasa podataka Autor (val ime: String, web stranica val: String)

Zatim instaliramo gson značajka:

instalacija (ContentNegotiation) {gson {setPrettyPrinting ()}}

Na kraju, dodajmo rutu na poslužitelj koji služi autorski objekt kao JSON:

get ("/ author") {val author = Autor ("baeldung", "baeldung.com") call.responding (autor)}

Autorski API poslužit će autorski podatkovni objekt kao JSON.

8. Dodavanje kontrolera

Da bismo razumjeli kako postupati s više zahtjeva za HTTP radnju, stvorimo TODO aplikaciju koja omogućava korisniku dodavanje, brisanje, pregled i popis TODO stavki.

Počet ćemo dodavanjem a Napraviti klasa podataka:

podatkovna klasa ToDo (var id: Int, val name: String, val opis: String, val završen: Boolean) 

Tada kreiramo ArrayList držati višestruko Napraviti stavke:

val toDoList = ArrayList (); 

Dalje, dodajemo kontrolere za obradu POST, DELETE i GET zahtjeva:

usmjeravanje () {route ("/ todo") {post {var toDo = call.receive (); toDo.id = toDoList.size; toDoList.add (toDo); call.responding ("Dodano")} delete ("/ {id}") {call.responder (toDoList.removeAt (call.parameters ["id"] !!. toInt ())); } get ("/ {id}") {call.responder (toDoList [call.parameters ["id"] !!. toInt ()]); } dobiti {call.responding (toDoList); }}}

Dodali smo a napravitiruta a zatim preslikao različite zahtjeve HTTP glagola na tu krajnju točku.

9. Zaključak

U ovom smo članku naučili kako stvoriti Kotlin poslužiteljsku aplikaciju s Ktor okvirom.

Izgradili smo malu poslužiteljsku aplikaciju za nekoliko minuta bez upotrebe bilo kakvog uzorka koda.

Kao i uvijek, uzorci koda mogu se naći na GitHubu.