Ktor: Alternatif Selain Spring Boot untuk Back-End Service di Kotlin

Ichwan Sholihin
4 min readSep 17, 2023
Photo by Louis Tsai on Unsplash

Halo semua, pada kesempatan kali ini saya akan membahas tentang framework service yang sedang populer pada kalangan Kotlin Developer, yakni Ktor.

Bagi anda yang terbiasa membangun sebuah service back-end mungkin sudah tak asing dengan Spring Boot Framework, salah satu framework client-server side yang sering digunakan oleh para Java Developer. Sedikit menjelaskan, Spring Boot merupakan framework yang dikembangkan untuk mempermudah pengembangan aplikasi Java serta digunakan untuk membangun aplikasi back-end yang dapat diakses melalui jaringan, seperti API web, layanan web, atau aplikasi berbasis server lainnya. Namun, Spring Boot tidak terbatas pada Java saja, anda juga dapat menggunakan Spring Boot untuk mengembangkan aplikasi dengan Kotlin. Spring Boot juga saat ini sudah mendukung penggunaan reactive programming khususnya RxJava.

Sama halnya dengan Spring Boot, Ktor juga memiliki layanan seperti web service, client-server side serta API. Namun, Ktor memiliki pendekatan yang lebih deklaratif dan berfokus pada functional programming ketimbang Spring Boot dengan pendekatan annotation.

Kelebihan Ktor

1. Pendekatan Functional Programming

Ktor mengadopsi pendekatan functional programming, yang dapat membantu menghasilkan kode yang testable, readable, dan maintainable. Ini juga membuatnya cocok untuk pengembangan aplikasi real-time dan aplikasi yang membutuhkan performa tinggi.

2. Dukungan untuk Coroutines

Jika Spring Boot terintegrasi dengan RxJava dalam hal management threading, Ktor juga memiliki integrasi yang kuat dengan Coroutines untuk proses concurrency. Coroutines adalah salah satu fitur paling kuat dari Kotlin, dan Ktor mengintegrasikannya dengan baik. Ini memungkinkan pengembang untuk mengelola tugas concurrent dengan lebih mudah, sehingga aplikasi dapat menjadi lebih responsif dan efisien.

3. Ekosistem Kotlin yang Kuat

Kotlin memiliki ekosistem yang kuat, termasuk dukungan yang semakin berkembang untuk third party library. Dengan menggunakan Ktor, anda dapat memanfaatkan ekosistem ini untuk mengembangkan fitur-fitur tambahan dengan lebih mudah.

Persiapan Project Ktor

Untuk memulai project menggunakan Ktor, anda dapat mengunjungi website start.ktor.io. Sama dengan spring initializr, kita dapat mengatur sendiri version, artifact serta library atau dependency yang akan digunakan. Bedanya, pada Ktor terdapat pilihan Engine dan Configuration In

Berikut kegunaan dari masing-masing Engine di Ktor:

  • Netty: dirancang khusus untuk menangani banyak client secara bersamaan dengan cara yang efisien. Netty juga dapat berdiri sendiri (stand alone application) tanpa membutuhkan server. (disarankan untuk menggunakan Netty jika anda baru belajar menggunakan Ktor)
  • Jetty: mendukung fitur-fitur asynchronous, yang cocok untuk aplikasi Ktor yang membutuhkan kinerja tinggi.
  • CIO (Coroutine I/O): memanfaatkan coroutines untuk mengatasi tugas-tugas I/O secara efisien dan non-blocking. CIO adalah pilihan yang menarik untuk aplikasi Ktor yang ingin memanfaatkan fitur Kotlin Coroutines secara maksimal.
  • Tomcat: memiliki dukungan yang luas dalam industri, dan banyak aplikasi web besar dibangun dengan menggunakan Tomcat sebagai server. Jika anda memiliki infrastruktur yang sudah ada yang menggunakan Tomcat, anda dapat mempertimbangkan untuk menjalankan Ktor di dalamnya.

Untuk pilihan Configuration In, anda dapat memilih opsi menggunakan HOCON file. HOCON (Human-Optimized Config Object Notation) adalah format konfigurasi yang mirip dengan JSON, tetapi dirancang agar lebih mudah dibaca dan ditulis oleh manusia.

Setelah selesai mengkonfigurasi project, selanjutnya tambahkan beberapa dependensi yang akan anda gunakan.

Implementasi Back-End Service dengan Ktor

Kali ini, saya akan memberikan sedikit gambaran bagaimana cara menerapkan Ktor sebagai back-end service. Namun sebelum itu, pastikan anda sudah menginstall IntellIj Idea sebagai compiler. Saya akan membuat project sederhana untuk mendapatkan data dari API sendiri.

Pertama, pada web start.ktor.io, tekan tombol Add Plugins untuk menambahkan beberapa plugin yang dibutuhkan. Pada project API sederhana ini, saya menggunakan beebrapa plugin berikut:

Anda juga dapat mengatur sendiri serta memahami kegunaan masing-masing plugin yang tersedia di Ktor. Setelah itu klik Generate Project untuk mendownload project yang telah di konfigurasi dan setelah download selesai, ekstrak folder dan buka dengan compiler yang anda gunakan.

Untuk project yang saya gunakan pada contoh kali ini tidak terlalu banyak kode yang di setup, anda cukup membuat data class mengelola data kemudian membuat class controller untuk konfigurasi endpoint. Selebihnya, anda hanya menambahkan beberapa line dari hasil generate plugin Ktor.

Anotasi @Serializable digunakan untuk mengkonversi file agar dapat dibaca sebagai JSON. Setelah membuat data class, buatlah satu kotlin file tambahan untuk menambahkan data dan API endpoint.

URL diatas mengarah ke directory resource yang berfungsi untuk menyimpan sumber daya file pada Ktor. Buat directory baru didalam directory static dengan nama cats dan download gambar-gambar ini.

Sebagai sentuhan terakhir, buka class Routing.kt pada package plugins dan panggil function dari file route.


fun Application.configureRouting() {
routing {
getCat()
// Static plugin. Try to access `/static/index.html`
staticResources("/", "static")
}
}

Back-end service sederhana sudah dapat anda jalankan, klik running pada compiler lalu akses data menggunakan localhost.

Ada banyak hal yang perlu anda eksplor lebih jauh agar lebih mengenal Ktor dalam implementasinya sebagai back-end service dengan Kotlin. Dengan pendekatan yang lebih sederhana, dukungan penuh terhadap Kotlin, dan fokus pada functional programming, Ktor cocok untuk berbagai jenis service. Namun, pilihan antara Ktor dan Spring Boot harus didasarkan pada kebutuhan, tingkat kenyamanan anda dengan masing-masing framework, dan kompleksitas yang anda perlukan. Setiap framework memiliki kelebihan dan kekurangannya sendiri, dan pemilihan tergantung pada tujuan dan kendala proyek yang anda hadapi.

--

--