Kotlin med Ktor

1. Oversigt

Ktor er en ramme til opbygning af asynkrone servere og klienter i tilsluttede systemer ved hjælp af det kraftfulde Kotlin-programmeringssprog. Det letter udviklingen af ​​en enkeltstående applikation med integrerede servere.

I denne vejledning skal vi undersøge, hvordan du opretter en enkeltstående serverapplikation ved hjælp af Ktor.

2. Opsætning af en Ktor-applikation

Lad os starte med at oprette Ktor-projektet. Vi bruger Gradle hvilket er den anbefalede og nemme at bruge tilgang. Gradle kan installeres ved at følge instruktionerne på Gradle websted.

Opret build.gradle fil:

gruppe 'com.baeldung.kotlin' version '1.0-SNAPSHOT' buildscript {ext.kotlin_version = '1.2.40' ext.ktor_version = '0.9.2' repositories {mavenCentral ()} afhængigheder {classpath "org.jetbrains.kotlin: kotlin-gradle-plugin: $ kotlin_version "}} anvend plugin: 'java' anvend plugin: 'kotlin' anvend plugin: 'application' mainClassName = 'APIServer.kt' sourceCompatibility = 1.8 compileKotlin {kotlinOptions.jvmTarget =" 1.8 "} compileTestKotlin {kotlinOptions.jvmTarget = "1.8"} kotlin {eksperimentel {coroutines "aktiverer"} lager {mavenCentral () jcenter () maven {url "//dl.bintray.com/kotlin/ktor"}} afhængigheder {kompilér "io .ktor: ktor-server-netty: $ ktor_version "kompilér" ch.qos.logback: logback-classic: 1.2.1 "testCompile gruppe: 'junit', navn: 'junit', version: '4.12'}

Vi har importeret Ktor og Ktor netty-serverpakken. Netty er den integrerede server, vi bruger i dette eksempel.

3. Opbygning af serveren

Vi opretter vores applikation ved at tilføje kode til kildemappen src / main / kotlin.

Her opretter vi filen APIServer.kt med hovedmetoden:

sjov hoved (args: Array) {} 

Dernæst opretter og starter vi den integrerede Netty-server:

embeddedServer (Netty, 8080) {} .start (vent = sand) 

Det opretter og starter serveren i porten 8080. Vi har sat Vent = sandt i Start() metode til at lytte efter forbindelser.

4. Opbygning af API

Lad os tilføje API. For at håndtere HTTP-anmodninger leverer Ktor Routing funktion.

Vi aktiverer Routing-funktion med en installere blokere, hvor vi kan definere ruter til specifikke stier og HTTP-metoder:

val jsonResponse = "" "{" id ": 1," task ":" Betal vandregning "," beskrivelse ":" Betal vandregning i dag ",}" "" embeddedServer (Netty, 8080) {install (Routing) {get ("/ todo") {call.respondText (jsonResponse, ContentType.Application.Json)}}. start (vent = sand)

I dette eksempel håndterer serveren a anmodning om stien /at gøre og svarer med et at gøre JSON-objekt. Vi lærer mere om installation af funktioner i sektionen Installation af funktioner.

5. Kørsel af serveren

For at køre serveren har vi brug for en køreopgave i Gradle:

opgave runServer (type: JavaExec) {main = 'APIServer' classpath = sourceSets.main.runtimeClasspath} 

For at starte serveren kalder vi denne opgave:

./gradlew runServer 

Out API kan derefter tilgås via // localhost: 8080 / todo.

6. Installation af funktioner

En Ktor-applikation består typisk af en række funktioner. Vi kunne tænke på funktioner som funktionalitet, der indsprøjtes i anmodnings- og svarpipelinen.

Bruger Standardhoved funktion, kan vi tilføje overskrifter til hvert udgående svar. Routing er en anden funktion, der giver os mulighed for at definere ruter til håndtering af anmodninger osv.

Vi kan også udvikle vores funktioner og installere dem.

Lad os se på ved at tilføje en brugerdefineret overskrift til hver anmodning ved at installere Standardhoved funktion:

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

På samme måde kan vi tilsidesætte standardoverskrifterne, der er indstillet af selve Ktor-rammen:

install (DefaultHeaders) {header (HttpHeaders.Server, "Min server")}

Listen over tilgængelige standardoverskrifter findes i klassen io.ktor.features.DefaultHeaders.

7. Serverer JSON

Det er ikke let at oprette strenget JSON manuelt. Ktor leverer en funktion til at tjene dataobjekter som JSON ved hjælp af Gson.

Lad os tilføje Gson-afhængighed i vores build.gradle:

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

For eksempel bruger vi et dataobjekt med navnet Forfatter:

dataklasse Forfatter (val navn: String, val websted: String)

Dernæst installerer vi gson funktion:

installer (ContentNegotiation) {gson {setPrettyPrinting ()}}

Lad os endelig tilføje en rute til serveren, der serverer et forfatterobjekt som JSON:

get ("/ author") {val author = Author ("baeldung", "baeldung.com") call.respond (author)}

Forfatterens API vil tjene forfatterens dataobjekt som JSON.

8. Tilføjelse af controllere

For at forstå hvordan man håndterer flere HTTP-handlingsanmodninger, lad os oprette en TODO-applikation, der giver brugeren mulighed for at tilføje, slette, se og liste TODO-elementer.

Vi starter med at tilføje en At gøre dataklasse:

dataklasse ToDo (var id: Int, val navn: String, val beskrivelse: String, val afsluttet: Boolsk) 

Så opretter vi en ArrayList at holde flere At gøre genstande:

val toDoList = ArrayList (); 

Dernæst tilføjer vi controllere til at håndtere POST, SLET og GET anmodninger:

routing () {route ("/ todo") {post {var toDo = call.receive (); toDo.id = toDoList.size; toDoList.add (toDo); call.respond ("Tilføjet")} delete ("/ {id}") {call.respond (toDoList.removeAt (call.parameters ["id"] !!. toInt ())); } get ("/ {id}") {call.respond (toDoList [call.parameters ["id"] !!. toInt ()]); } få {call.respond (toDoList); }}}

Vi har tilføjet en at gørerute og kortlagde derefter de forskellige HTTP-verbeanmodninger til dette slutpunkt.

9. Konklusion

I denne artikel har vi lært, hvordan man opretter en Kotlin-serverapplikation med Ktor-rammen.

Vi har bygget en lille serverapplikation på få minutter uden brug af kogepladekode.

Som altid kan kodeeksemplerne findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found