CodeBlanks Logo Icon CodeBlanks

Ktor API

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

Main.kt
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

Main.kt
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

Soru
____ Api(val repo: UserRepo)
Cevap
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.

İleri seviye bölümündeki tüm dersler