Mengembangkan Rest API dengan Ktor. Simpel!
Sejak pandemi Covid-19 kita jadi sering melihat banyak developer berbagi Rest API demi informasi dan data. Nah pernah gak terpikirkan gimana caranya kembangkan sebuah Rest Api yang dapat digunakan oleh banyak developer? Di tulisan ini saya akan membahas cara sederhana untuk mengembangkannya. Kita akan menggunakan framework bernama Ktor! Sudah familiar belum?
Apa itu Ktor
Ktor merupakan framework yang dapat digunakan untuk membangun sebuah asynchronous server dan client dalam sistem yang terhubung menggunakan bahasa pemrograman Kotlin.
💻 Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar SekarangSaya sendiri menggunakan Ktor baru beberapa bulan terakhir. Momennya itu dulu sempat bingung soal framework apa yang cocok dengan saya yang sering mengembangkan aplikasi menggunakan Kotlin.
Kita semua tau jika Kotlin merupakan merupakan salah satu bahasa pemrograman yang powerful dan kaya fitur. Sebut saja fitur Null Safety yang dapat mencegah terjadinya NPE saat runtime. Kemudian ada fitur Extensions yang memungkinkan kita menuliskan kode dengan cara yang lebih sederhana. Karena penggunaan Kotlin itulah saya putuskan untuk belajar lebih dalam tentang Ktor. Voila, kini saya senang bisa membaginya di tulisan kali ini.
Ohiya. Untuk teman-teman yang penasaran dengan bahasa pemrograman Kotlin. Bisa dipelajari secara komprehensif di kelas Memulai Pemrograman Dengan Kotlin. Okey, langsung aja kita mulai dengan menginstall terlebih dahulu plugin Ktor pada IntelliJ IDEA.
Ktor Plugin
Bentar, kok harus install plugin-nya dulu? Yup, karena secara default Ktor tak tersedia pada paket instalasi IntelliJ IDEA. Jadi kita perlu menginstalnya terlebih dahulu. Langsung saja teman-teman ikuti caranya sbb:
- Buka halaman setting yang dapat diakses pada File -> Settings.
- Setelah terbuka, klik menu Plugins pada jendela yang tampil dan ketikkan Ktor pada kolom pencarian seperti berikut:
- Setelah hasil pencarian muncul, langsung saja klik Install dan tunggu sampai proses instalasi selesai.
- Jika sudah selesai, klik Restart IDE dan pilih Restart pada jendela yang tampil.
Saat IntelliJ IDEA sudah terbuka kembali, kita bisa langsung membuat project Ktor baru. Mudah bukan? Eits, ini masih awal, kita akan berjumpa dengan hal-hal mudah dan menarik lainnya. Tetap semangat!
Memulai Project Baru Ktor
Lanjut, setelah selesai dengan instalasi plugin, langsung saja buat project baru pada IntelliJ IDEA dengan memilih project Ktor. Nah, pada jendela yang tampil kita akan memilih fitur apa saja yang akan kita gunakan pada sisi server dan client. Untuk project saat ini, kita akan menggunakan beberapa fitur seperti Routing dan Gson untuk server. Sedangkan untuk client kita akan menggunakan HttpClient dan Jetty HttpClient. Teman-teman bisa memilihnya seperti berikut:
Setelah selesai milih, teman-teman bisa langsung klik Next untuk menentukan informasi project yang akan dibuat seperti GroupId, ArtifactId, dan Version. Informasi yang kami masukkan, silakan sesuaikan ya. Kalo saya informasi project-nya seperti ini:
Jika semua sudah ditentukan, klik Next dan tunggu sampai project dibuat. Jika baru pertama kali, sabar ya karena agak sedikit lama. IntelliJ IDEA akan mengunduh terlebih dahulu beberapa dependensi pendukung sesuai dengan fitur yang kita pakai.
Setelah project berhasil dibuat, kita bisa langsung menjalankannya. Eh, serius? Yap, project yang dibuat tersebut bisa langsung dijalankan tanpa harus konfigurasi lagi di dalam project. Mantap kan? Langsung saja klik tombol Run dan buka url yang tampil pada konsol. Kita bisa mencoba route yang sudah tersedia seperti berikut:
Sebelum lanjut, kita bahas singkat terlebih dahulu route yang sudah ada pada project. Dimulai dari route dengan path “/”. Route tersebut akan mengembalikan nilai berupa plaintext pada browser dengan memanfaatkan fungsi respondText(). Kemudian route berikutnya dengan path “json/gson/” akan mengembalikan response berupa json pada browser dengan memanfaatkan fungsi respond().
Menambahkan route baru
Apakah kita bisa menambahkan route baru sesuai dengan yang diinginkan? Bisa dong, caranya pun cukup mudah. Yaitu dengan menambahkannya langsung di dalam scope Routing dengan memanfaatkan extensions get atau extensions yang tersedia sesuai dengan yang kita inginkan. Contohnya seperti kode di bawah berikut:
1 2 3 4 5 6 7 |
routing { get("/") { … } get("/json/gson") { … } get("/dicoding/api") { call.respond(mapOf("message" to "Hello Dicoding Students!")) } } |
Route baru yang ditambahkan di atas akan mengembalikan response json seperti yang sudah kita tentukan. Setelah ditambahkan, kita bisa langsung mencobanya dengan melakukan re-run project dan membuka route yang sudah kita tambahkan tersebut pada browser seperti berikut:
Gimana, cukup mudah bukan? Mari kita lanjut menambahkan parameter pada route yang sudah kita buat.
Menambahkan Parameter Pada route
Untuk menambahkan parameter baru, kita tak perlu menambahkan kode untuk tetapkan parameternya akan seperti apa, Kita cukup tambahkan kode untuk mendapatkan nilai dari parameter tersebut ketika mengakses route. Contohnya, mari kita ubah route yang sudah kita tambahkan sebelumnya menjadi seperti berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
routing { get("/") { … } get("/json/gson") { … } get("/dicoding/api") { val name = call.request.queryParameters["name"] call.respond( mapOf( "name" to name, "message" to "Hello Dicoding Students!" ) ) } } |
Yuk kita perhatikan contoh kode di atas. Untuk mendapatkan nilai dari parameter, kita bisa menggunakan fungsi request.queryParameters() dengan argumen berupa nama dari parameter yang kita ingin dapatkan. Dengan cara seperti ini, kita juga bisa mendapatkan nilai dari beberapa parameter seperti berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
routing { get("/") { … } get("/json/gson") { … } get("/dicoding/api") { val firstName = call.request.queryParameters["firstName"] val lastName = call.request.queryParameters["lastName"] call.respond( mapOf( "firstName" to firstName, "lastName" to lastName, "message" to "Hello $firstName $lastName. Welcome to Dicoding!" ) ) } } |
Selain itu, kita juga bisa menentukan response seperti apa yang akan dikembalikan jika parameter tersebut tidak ditambahkan ketika route diakses. Caranya pun cukup umum dengan memastikan nilai parameter tersebut bernilai null atau tidak menggunakan if expression atau menggunakan fungsi let seperti berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
routing { get("/") { … } get("/json/gson") { … } get("/dicoding/api") { val firstName = call.request.queryParameters["firstName"] val lastName = call.request.queryParameters["lastName"] if (!firstName.isNullOrBlank() && !lastName.isNullOrEmpty()) { call.respond( mapOf( "firstName" to firstName, "lastName" to lastName, "message" to "Hello $firstName $lastName. Welcome to Dicoding!" ) ) } else { call.respond( mapOf( "message" to "Hello Dicoding Students!" ) ) } } } |
Mari kita jalankan kembali perubahan yang sudah kita terapkan. Jika mulus tanpa eror, hasilnya akan seperti di bawah ini:
Gimana? Sudah punya rancangan Rest API yang ingin dikembangkan? Oh Iya, saya punya project database inventory sederhana yang saya buat menggunakan Ktor. Mari lihat di sini ya. Jangan lupa klik Star nya xD.
Ktor adalah sebuah framework yang powerful yang sudah bisa kita gunakan dalam lingkup production. Dengan langkah-langkah mudah yang sudah kita pelajari bersama, Ktor bisa jadi pilihan kita untuk mengembangkan Rest API. Sebenarnya ada banyak framework yang bisa kita gunakan untuk mengembangkan Rest API. Seperti SpringBoot, NodeJS, dll.
Okey, mungkin segitu dulu tulisan saya kali ini. Ada yang kurang jelas atau ingin ditanyakan? Silakan tulis komentar di kolom yang sudah tersedia di bawah ya.
Mengembangkan Rest API dengan Ktor. Simpel! -end