Kotlin dengan Ktor

1. Ikhtisar

Ktor adalah framework untuk membangun server dan klien asinkron dalam sistem yang terhubung menggunakan bahasa pemrograman Kotlin yang andal. Ini memfasilitasi pengembangan aplikasi mandiri dengan server tertanam.

Dalam tutorial ini, kita akan membahas cara membuat aplikasi server mandiri menggunakan Ktor.

2. Menyiapkan Aplikasi Ktor

Mari kita mulai dengan menyiapkan proyek Ktor. Kami akan menggunakan Gradle yang merupakan pendekatan yang direkomendasikan dan mudah digunakan. Gradle dapat diinstal dengan mengikuti petunjuk yang disediakan di situs Gradle .

Buat file build.gradle :

group 'com.baeldung.kotlin' version '1.0-SNAPSHOT' buildscript { ext.kotlin_version = '1.2.40' ext.ktor_version = '0.9.2' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'java' apply plugin: 'kotlin' apply plugin: 'application' mainClassName = 'APIServer.kt' sourceCompatibility = 1.8 compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } kotlin { experimental { coroutines "enable" } } repositories { mavenCentral() jcenter() maven { url "//dl.bintray.com/kotlin/ktor" } } dependencies { 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' }

Kami telah mengimpor Ktor dan paket server netty Ktor. Netty adalah server tertanam yang akan kita gunakan dalam contoh ini.

3. Membangun Server

Kami membuat aplikasi kami dengan menambahkan kode ke folder sumber src / main / kotlin .

Di sini, kami membuat file APIServer.kt dengan metode utama:

fun main(args: Array) { } 

Selanjutnya, kami membuat dan memulai server Netty tertanam:

embeddedServer(Netty, 8080) { }.start(wait = true) 

Ini akan membuat dan memulai server di port 8080 . Kami telah menetapkan wait = true dalam metode start () untuk mendengarkan koneksi.

4. Membangun API

Mari tambahkan API. Untuk menangani permintaan HTTP, Ktor menyediakan fitur Routing .

Kami mengaktifkan fitur Perutean dengan blok pemasangan tempat kami dapat menentukan rute untuk jalur tertentu dan metode HTTP:

val jsonResponse = """{ "id": 1, "task": "Pay waterbill", "description": "Pay water bill today", }""" embeddedServer(Netty, 8080) { install(Routing) { get("/todo") { call.respondText(jsonResponse, ContentType.Application.Json) } } }.start(wait = true)

Dalam contoh ini, server akan menangani GET permintaan untuk jalur / todo dan akan membalas dengan todo objek JSON . Kami akan mempelajari lebih lanjut tentang menginstal fitur di bagian Menginstal Fitur.

5. Menjalankan Server

Untuk menjalankan server, kita perlu menjalankan tugas di Gradle:

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

Untuk memulai server, kami menyebutnya tugas ini:

./gradlew runServer 

API Keluar kemudian dapat diakses melalui // localhost: 8080 / todo.

6. Memasang Fitur

Aplikasi Ktor biasanya terdiri dari serangkaian fitur. Kita dapat menganggap fitur sebagai fungsionalitas yang dimasukkan ke dalam pipa permintaan dan respons.

Dengan menggunakan fitur DefaultHeaders , kita dapat menambahkan header ke setiap respons keluar. Routing adalah fitur lain yang memungkinkan kita menentukan rute untuk menangani permintaan, dll.

Kami juga dapat mengembangkan fitur kami dan menginstalnya.

Mari kita lihat dengan menambahkan tajuk khusus ke setiap permintaan dengan menginstal fitur DefaultHeaders :

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

Demikian pula, kita dapat mengganti header default yang ditetapkan oleh framework Ktor itu sendiri:

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

Daftar header default yang tersedia dapat ditemukan di kelas io.ktor.features.DefaultHeaders.

7. Melayani JSON

Membuat JSON yang dirangkai secara manual tidaklah mudah. Ktor menyediakan fitur untuk menyajikan objek data sebagai JSON menggunakan Gson .

Mari tambahkan ketergantungan Gson di build.gradle kita :

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

Misalnya, kami menggunakan objek data dengan nama Penulis:

data class Author(val name: String, val website: String)

Selanjutnya, kami menginstal fitur gson :

install(ContentNegotiation) { gson { setPrettyPrinting() } }

Terakhir, mari tambahkan rute ke server yang melayani objek penulis sebagai JSON:

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

API penulis akan melayani objek data penulis sebagai JSON .

8. Menambahkan Pengontrol

Untuk memahami cara menangani beberapa permintaan tindakan HTTP, mari buat aplikasi TODO yang memungkinkan pengguna untuk menambah, menghapus, melihat, dan mendaftar item TODO.

Kami akan mulai dengan menambahkan kelas data Todo :

data class ToDo(var id: Int, val name: String, val description: String, val completed: Boolean) 

Kemudian kami membuat ArrayList untuk menampung beberapa item Todo :

val toDoList = ArrayList(); 

Selanjutnya, kami menambahkan pengontrol untuk menangani permintaan POST, DELETE dan GET:

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

Kami telah menambahkan todo rute dan kemudian dipetakan kata kerja HTTP yang berbeda meminta untuk endpoint itu.

9. Kesimpulan

Di artikel ini, kita telah mempelajari cara membuat aplikasi server Kotlin dengan framework Ktor.

Kami telah membuat aplikasi server kecil dalam beberapa menit tanpa menggunakan kode boilerplate apa pun.

Seperti biasa, contoh kode dapat ditemukan di GitHub.