Ktor API
- Kotlin kursu
- İleri seviye
- Ders 80/83
- 6 dk
Ktor ile REST API iskeletini kurarsın.
Apı ile yol yönlendirme
İkinci ders, Api sınıfı ekler. Bir UserRepo alır; route(path) metodu URL yolunu yorumlar. Bu, Ktor'ın routing katmanını küçük çapta taklit eder.
Örnek: class Api(val repo: UserRepo). route("/users/1") çağrısı id=1'i çıkarır, repo.find(1) ile kullanıcıyı bulur ve adını döndürür. Bilinmeyen yollar "404" verir. Bu kalıp, HTTP isteklerini iş mantığına bağlar.
route ve startsWith
route metodu path.startsWith("/users/") ile yolu tanır. removePrefix ile id kısmını çıkarır, toInt() ile sayıya çevirir.
Örnek: path.removePrefix("/users/").toInt(). "/users/1" yolu 1 id'sini verir. Bu değer repo.find(id)'e geçilir. Bu kalıp, URL'den parametre çıkarmanın özlü bir yoludur; Ktor'ın @Location desenine benzer.
Uygulama Apı sınıfını ekle
Mevcut User ve UserRepo tanımlarını koru. Yanlarına class Api(val repo: UserRepo) ekle; fun route(path: String): String metodu yaz. Metot path.startsWith("/users/") ise id'yi çıkarıp repo.find(id)?.name ?: "not found" döndürsün; değilse "404" versin. main içinde repoya User(1, "Ayşe") ekle, Api(repo) oluştur ve println(api.route("/users/1")) yazdır.
Başlangıç kodu
data class User(val id: Int, val name: String)
class UserRepo {
private val users = mutableListOf<User>()
fun save(u: User) { users.add(u) }
fun find(id: Int): User? = users.find { it.id == id }
}
fun main() {
val repo = UserRepo()
repo.save(User(1, "Ayşe"))
println(repo.find(1))
}
// Api sınıfı: route metodu
// main'de api oluştur, /users/1 çağrısını yazdırÖrnek çözüm
data class User(val id: Int, val name: String)
class UserRepo {
private val users = mutableListOf<User>()
fun save(u: User) { users.add(u) }
fun find(id: Int): User? = users.find { it.id == id }
}
class Api(val repo: UserRepo) {
fun route(path: String): String {
return when {
path.startsWith("/users/") -> {
val id = path.removePrefix("/users/").toInt()
repo.find(id)?.name ?: "not found"
}
else -> "404"
}
}
}
fun main() {
val repo = UserRepo()
repo.save(User(1, "Ayşe"))
val api = Api(repo)
println(api.route("/users/1"))
}Beklenen çıktı
Ayşe
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Apı sınıfı tanımını tamamla
____ Api(val repo: UserRepo)
class Api(val repo: UserRepo)
Açıklama: class Apı bir sınıf tanımlar.
2 Apı parçalarını eşle
| Kavram | Anlamı |
|---|---|
class Api(val repo) |
Apı sınıfı |
route(path) |
Yol yönlendirme |
startsWith("/users/") |
Yol tanıma |
removePrefix |
Id çıkarma |
3 Api.route metodu bilinmeyen bir yol için ne döndürür?
- null
- Boş liste
- "404" Doğru cevap
- Exception fırlatır
Açıklama: Bilinmeyen yollar "404" döndürür.