Routing dan Parameter Bertipe
Definisikan rute dengan parameter jalur dan kueri, lalu kelompokkan menggunakan blok route.
Routing dan Parameter Bertipe adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.
Dasar-Dasar Perutean Ktor
Perutean dalam Ktor adalah pengaya yang dipasang melalui install(Routing) { ... } atau singkatan routing { ... }. Rute ditentukan menggunakan fungsi metode HTTP: get, post, put, delete, patch.
routing {
get("/hello") { call.respondText("Hello!") }
post("/items") { /* handle POST */ }
}Parameter Jalur
Tentukan parameter jalur dengan {name}. Akses parameter tersebut melalui call.parameters["name"]. Nilainya selalu berupa String?:
get("/users/{id}") {
val id = call.parameters["id"] ?: return@get call.respondText("Missing id", status = HttpStatusCode.BadRequest)
call.respondText("User: $id")
}Segmen Jalur Opsional
Tandai segmen sebagai opsional dengan menambahkan ?: {name?}. Jika segmen tidak ada, call.parameters["name"] mengembalikan null.
get("/posts/{slug?}") {
val slug = call.parameters["slug"]
if (slug == null) call.respondText("All posts")
else call.respondText("Post: $slug")
}Konversi Parameter Bertipe
Konversikan parameter jalur ke nilai bertipe menggunakan fungsi ekstensi pada Parameters. Ktor menyediakan pembantu bawaan, atau Anda dapat menulisnya sendiri:
get("/items/{id}") {
val id = call.parameters["id"]?.toLongOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Invalid id")
call.respondText("Item #$id")
}Parameter Kueri
Akses parameter string kueri melalui call.request.queryParameters["key"]. Beberapa nilai untuk kunci yang sama tersedia melalui getAll("key"):
get("/search") {
val q = call.request.queryParameters["q"] ?: ""
val page = call.request.queryParameters["page"]?.toIntOrNull() ?: 1
call.respondText("Search: $q, page $page")
}Pengelompokan Rute
Kelompokkan rute yang berkaitan di bawah awalan umum menggunakan route("/prefix") { ... }. Hal ini mengurangi pengulangan dan membuat pohon perutean mudah dibaca:
route("/api/v1") {
route("/users") {
get { /* list users */ }
get("/{id}") { /* get user by id */ }
post { /* create user */ }
}
}Mengatur Rute dalam Fungsi
Ekstrak kelompok rute ke dalam fungsi ekstensi pada Route agar konfigurasi perutean tetap modular:
fun Route.userRoutes() {
route("/users") {
get { /* ... */ }
post { /* ... */ }
get("/{id}") { /* ... */ }
}
}
// In Application module:
routing { userRoutes() }Menangani Isi Permintaan
Terima isi permintaan sebagai teks, byte, atau objek yang dideserialisasi (memerlukan pengaya ContentNegotiation). Gunakan call.receive untuk deserialisasi bertipe:
post("/users") {
val user = call.receive<UserDto>()
call.respond(HttpStatusCode.Created, user)
}Merespons dengan Kode Status
Gunakan call.respond(status, body) untuk kendali penuh, atau metode praktis call.respondText(), call.respondFile(), call.respond(HttpStatusCode.NotFound):
get("/users/{id}") {
val user = userRepo.find(call.parameters["id"])
if (user == null) call.respond(HttpStatusCode.NotFound)
else call.respond(user)
}Rute Karakter Pengganti dan Sisa Jalur
Gunakan * untuk satu segmen karakter pengganti dan {...} (pencocok sisa jalur) untuk mencocokkan sisa jalur sebagai satu parameter:
get("/static/{path...}") {
val filePath = call.parameters.getAll("path")?.joinToString("/") ?: ""
call.respondText("Serving: $filePath")
}Prioritas Rute
Ktor mengevaluasi rute berdasarkan urutan deklarasi. Rute yang lebih spesifik harus dideklarasikan sebelum karakter pengganti. Jika dua rute cocok, kecocokan pertama yang digunakan.
Pemeriksaan Singkat
Bagaimana cara mengelompokkan beberapa rute di bawah awalan URL umum dalam Ktor?
Rekapitulasi: Perutean dan Parameter Bertipe
Poin penting:
- Tentukan rute dengan
get,post, dan seterusnya di dalamrouting { } - Parameter jalur:
{name}— akses melaluicall.parameters["name"] - Parameter kueri:
call.request.queryParameters["key"] - Kelompokkan rute dengan
route("/prefix") { }dan ekstrak ke fungsi ekstensi padaRoute - Terima isi bertipe dengan
call.receive(memerlukan ContentNegotiation)()
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Routing dan Parameter Bertipe” gratis?
Ya — teks lengkap “Routing dan Parameter Bertipe” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Routing dan Parameter Bertipe”?
Definisikan rute dengan parameter jalur dan kueri, lalu kelompokkan menggunakan blok route. Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Kotlin Academy?
Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Routing dan Parameter Bertipe” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?
Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penyiapan Proyek Ktor: embeddedServer dan Modul Application
- Routing dan Parameter Bertipe
- Negosiasi Konten dan kotlinx.serialization
- Plugin Autentikasi: JWT dan Sesi