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.