Ktor — asosiy tushunchalar, mijoz kutubxonasi va Kotlin Multiplatform

Muallif: IT Sectr Nashr etilgan: 2026-05-05 O'qish vaqti: 8 daq

Ktor — bu multiplatforma ishlanmani qo'llab-quvvatlovchi Kotlin uchun asinxron HTTP mijoz va server freymvorkidir. Kutubxona Kotlin korutinlari asosida qurilgan va JVM, iOS, Android, JS va Native da ishlaydi. Ktor ning GitHub ombori ma'lumotlariga ko'ra, loyiha JetBrains jamoasi tomonidan faol rivojlantirilmoqda. Ktor HTTP ulanishlarini moslashuvchan sozlash uchun plagin tizimi bilan modulli arxitekturani taklif qiladi.

Asosiy nuqtalar

  • Ktor — multiplatforma qo'llab-quvvatlovi bilan Kotlin uchun JetBrains dan HTTP mijoz va server
  • Korutinlar Kotlin chaqiruvlarsiz asinxron so'rov bajarilishini ta'minlaydi
  • Plagin arxitekturasi loglash, serializatsiya va autentifikatsiyani ulash imkonini beradi
  • Multiplatformalilik — bir kod iOS, Android, JVM, JS va Native da ishlaydi
  • Kontent kelishuvi avtomatik ravishda ma'lumotlarni JSON ga serializatsiya va deserializatsiya qiladi

Ktor nima?

Ktor — bu JetBrains kompaniyasi tomonidan ishlab chiqilgan Kotlin tilida HTTP mijozlar va serverlarni yaratish uchun freymvork. An'anaviy kutubxonalardan farqli o'laroq, Ktor boshidanoq multiplatforma ishlanmasi uchun mo'ljallangan va Kotlin tomonidan qo'llab-quvvatlanadigan barcha platformalarda ishlaydi.

Ktor Kodein va Express.js arxitekturasidan ilhomlangan oraliq ishlov berish yondashuvidan foydalanadi. Har bir so'rov so'rov va javobni o'zgartirishi mumkin bo'lgan ishlov beruvchi funksiyalar quvuridan o'tadi. Bu annotatsiyalarga asoslangan qattiq arxitekturali kutubxonalarda mavjud bo'lmagan moslashuvchanlikni ta'minlaydi.

Joriy versiya Ktor 3.0 Kotlin 2.0, K2 kompilyatori va yaxshilangan unumdorlikka ega yangi CIO (Coroutine I/O) dvigatelini qo'llab-quvvatlashni o'z ichiga oladi. Kutubxona Apache 2.0 litsenziyasi ostida tarqatiladi va cheklovlarsiz tijorat maqsadlarida foydalanish mumkin.

Ktor ning mijoz qismi to'liq Kotlin korutinlari asosida qurilgan bo'lib, bu oqimlarni bloklamasdan samarali asinxron so'rov bajarilishini ta'minlaydi. Server qismi marshrutlash, so'rovlarni qayta ishlash va WebSocket ulanishlari bilan HTTP serverlarini yaratishga imkon beradi.

Ktor plagin arxitekturasidan foydalanadi: barcha qo'shimcha funksiyalar — loglash, serializatsiya, autentifikatsiya — plaginlar orqali ulanadi. Bu kutubxonani modulli qiladi va faqat kerakli komponentlarni ulashga imkon beradi, yakuniy dastur hajmini kamaytiradi.

Barcha platformalarda yagona API tufayli dasturchi iOS va Android uchun turli HTTP mijozlarini o'rganishi shart emas. Multiplatforma loyihasida tarmoq qatlamining kodi to'liq umumiy bo'lib, platformaga xos amalga oshirish HttpClient dvigateli orqasida yashiringan. Bu ishlanma vaqtini qisqartiradi va platformalar farqlari bilan bog'liq xatolar sonini kamaytiradi.

Ktor ning asosiy imkoniyatlari

Ktor zamonaviy Kotlin loyihalari, ayniqsa multiplatforma loyihalari uchun jozibador tanlov qiladigan funksiyalar to'plamini taqdim etadi.

Multiplatforma qo'llab-quvvatlashi

Ktor JVM, Android, iOS, macOS, Windows, Linux, JavaScript va Wasm da ishlaydi. HTTP mijozining bir xil kodi barcha platformalarda o'zgarishsiz ishlaydi. Bu OkHttp yoki URLSession ga bog'liq kutubxonalarga nisbatan asosiy ustunlikdir.

Korutinlarda asinxronlik

Korutinlar Kotlin chaqiruvlarsiz tabiiy asinxronlikni ta'minlaydi. Har bir so'rov har qanday korutindan chaqirilishi mumkin bo'lgan suspend-funksiyadir. Ktor uzoq ulanishlar va WebSocket uchun qulay bo'lgan Flow orqali javoblarni oqimlashni qo'llab-quvvatlaydi.

Plagin arxitekturasi

Plaginlar Ktor da install bloki orqali ulanadi va alohida sozlanadi. Asosiy plaginlar: serializatsiya uchun ContentNegotiation, loglash uchun Logging, autentifikatsiya uchun Auth va ikki tomonlama aloqa uchun WebSockets. Har bir plagin mustaqil ravishda yoqilishi yoki o'chirilishi mumkin.

Xatolarni qayta ishlash va vaqt chegaralari

Xatolarni qayta ishlash Ktor da istisnolar asosida qurilgan. ClientRequestException sinfi 4xx kodlarida, ServerResponseException 5xx da, IOException esa tarmoq xatolarida chiqariladi. Vaqt chegaralari HttpTimeout plagini orqali sozlanadi, u ulanish, o'qish va yozish kutish vaqtini belgilaydi. Qayta urinishlar uchun Retry plagini urinishlar soni va kechikish sozlamalari bilan ishlatiladi.

Ktor qanday ishlaydi?

Ktor quvur arxitekturasidan foydalanadi, bunda har bir so'rov ishlov beruvchilar zanjiridan o'tadi. Mijoz o'rnatilgan plaginlar bilan HttpClient konfiguratsiyasini yaratadi va har bir get yoki post metodi chaqiruvi plaginlar orqali ularni ulash tartibida o'tadi.

HttpClient arxitekturasi

HttpClient obyekti platformaga xos dvigatel bilan yaratiladi: JVM va Android uchun CIO, iOS va macOS uchun Darwin, Android muvofiqligi uchun OkHttp, brauzer uchun Js. Dvigatel aniq tanlanishi yoki avtomatik tanlov qoldirilishi mumkin. Har bir so'rov javob tanasini, sarlavhalarni va statusni o'z ichiga olgan HttpResponse ni qaytaradi.

kotlin
val client = HttpClient(CIO) {
    install(ContentNegotiation) {
        json(Json {
            ignoreUnknownKeys = true
        })
    }
}

suspend fun fetchUsers(): List<User> {
    return client.get("https://api.example.com/users").body()
}

Ktor ni o'rnatish va sozlash

O'rnatish Ktor Gradle yoki Maven orqali amalga oshiriladi. Multiplatforma loyihalarida bog'liqliklar har bir target uchun sourceSets da ko'rsatiladi. Ktor Maven Central orqali tarqatiladi.

Gradle orqali ulash

build.gradle.kts da umumiy kod uchun ktor-client-core bog'liqligini va aniq platforma uchun dvigatelni qo'shing. Ktor versiyasi gradle.properties dagi o'zgaruvchi orqali o'rnatiladi. Ktor 3.x Kotlin 2.0+ ni talab qiladi va K2 kompilyatorini qo'llab-quvvatlaydi.

kotlin
val ktorVersion = "3.0.3"

dependencies {
    implementation("io.ktor:ktor-client-core:$ktorVersion")
    implementation("io.ktor:ktor-client-cio:$ktorVersion")
    implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
    implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
    implementation("io.ktor:ktor-client-logging:$ktorVersion")
}

iOS uchun sozlash

iOS uchun mahalliy URLSession ni o'rab oluvchi Darwin dvigateli ishlatiladi. Kotlin Multiplatform da bu maksimal unumdorlik va iOS tizim keshlash mexanizmlari bilan integratsiyani olish imkonini beradi. Dvigatel iOS sourceSet da alohida bog'liqlik sifatida qo'shiladi.

Ktor ning muhim xususiyati — ContentNegotiation orqali turli serializatsiya formatlarini qo'llab-quvvatlashdir. JSON dan tashqari, plagin Protobuf, CBOR, XML va maxsus formatlarni qo'llab-quvvatlaydi. Serializatsiya uchun kotlinx.serialization yoki Jackson kutubxonalari ishlatiladi va dasturchi so'rov kodini o'zgartirmasdan ular o'rtasida almashishi mumkin.

Ktor dan foydalanish misollari

Misollar quyida Ktor mijoz bilan ishlashning odatiy stsenariylarini namoyish etadi: asosiy GET so'rovi, ma'lumotlarni yuborish va multiplatforma kodi bilan ishlash.

JSON deserializatsiyasi bilan GET so'rovi

Oddiy GET so'rovi javobni data-sinfga avtomatik deserializatsiya qilish bilan. Ktor JSON ni obyektlarga aylantirish uchun kotlinx.serialization bilan ContentNegotiation plagini ishlatadi. Kod ixcham va xavfsiz.

kotlin
@Serializable
data class Post(
    val id: Int,
    val title: String,
    val body: String
)

suspend fun getPosts(): List<Post> {
    val response = client.get("https://jsonplaceholder.typicode.com/posts")
    return response.body()
}

JSON tanasi bilan POST so'rovi

Ktor da POST so'rovi contentType va setBody bilan post metodi orqali data-sinfni JSON tanasi sifatida yuboradi. ContentNegotiation plagini avtomatik ravishda obyektni JSON qatoriga serializatsiya qiladi. Javob sinxron yoki asinxron qayta ishlanishi mumkin.

kotlin
suspend fun createPost(): Post {
    val newPost = Post(
        id = 0,
        title = "Yangi post",
        body = "Post mazmuni"
    )
    val response = client.post("https://jsonplaceholder.typicode.com/posts") {
        contentType(ContentType.Application.Json)
        setBody(newPost)
    }
    return response.body()
}

Multipart orqali fayl yuklash

Ktor da submitFormWithBinaryData metodi fayllar va formalarni multipart formatida yuborish imkonini beradi. Ktor avtomatik ravishda ma'lumotlarni qismlarga ajratadi va sarlavhalar qo'shadi. Taraqqiyotni kuzatish uchun yuborilgan ma'lumotlar baytlarini oluvchi onUpload ishlatiladi.

kotlin
suspend fun uploadFile(fileBytes: ByteArray) {
    client.submitFormWithBinaryData(
        url = "https://api.example.com/upload",
        formData = formData {
            append("file", fileBytes, Headers.build {
                append(HttpHeaders.ContentType, "image/png")
                append(HttpHeaders.ContentDisposition, "filename=\"photo.png\"")
            })
        }
    )
}

Ktor yoki Retrofit: nimani tanlash kerak?

Tanlov Ktor va Retrofit o'rtasida loyihaning arxitekturasiga va multiplatformalilik talablariga bog'liq. Retrofit faqat Android loyihalari uchun standart bo'lib qolmoqda, Ktor esa Kotlin Multiplatform uchun eng yaxshi tanlovdir.

Ktor shuningdek WebSocket va SSE (Server-Sent Events) uchun o'rnatilgan qo'llab-quvvatlashni taqdim etadi, bu uni real vaqt ilovalari uchun qulay qiladi. Retrofit WebSocket ni to'g'ridan-to'g'ri qo'llab-quvvatlamaydi — buning uchun alohida OkHttp WebSocket kutubxonasi talab qilinadi. Ktor shuningdek har bir plagin bitta funksiya uchun javob beradigan plagin tizimi tufayli turli muhitlar uchun osonroq sozlanadi.

Ktor da autentifikatsiya

Ktor da Auth plagini asosiy autentifikatsiya, Bearer tokenlari, Digest va OAuth2 ni qo'llab-quvvatlaydi. Autentifikatsiya sozlamasi deklarativ ravishda amalga oshiriladi: dasturchi provayderni, token manbasini va harakat doirasini belgilaydi. Ktor avtomatik ravishda so'rovlarga autentifikatsiya sarlavhalarini qo'shadi va token muddati tugaganda uni yangilashi mumkin.

Agar loyiha iOS va Android da umumiy kod bilan Kotlin Multiplatform dan foydalansa, Ktor qo'shimcha qatlamlarsiz ikkala platformada ishlaydigan yagona variantdir. Retrofit qattiq OkHttp va JVM ga bog'langan, bu uni iOS uchun yaroqsiz qiladi.

Faqat Android loyihalari uchun Retrofit yetukroq API, ko'proq konvertorlar va OkHttp interceptors larini ta'minlaydi. Ktor bu stsenariyda ham ishlaydi, lekin uning plagin ekotizimi kamroq keng. Ikkala kutubxona korutinlarni qo'llab-quvvatlaydi va solishtirma unumdorlikni ta'minlaydi.

MezonKtorRetrofit
MultiplatformalilikiOS, Android, JVM, JS, NativeFaqat JVM va Android
HTTP dvigateliCIO, Darwin, OkHttp, JsOkHttp
Konvertorlarkotlinx.serialization, JacksonGson, Moshi, Jackson, Protobuf
ArxitekturaPlaginlar bilan quvurKod generatsiyasi bilan annotatsiyalar
Ishlab chiqaruvchiJetBrainsSquare

Tez-tez beriladigan savollar

Ktor Retrofit dan qanday farq qiladi?

Ktor — JetBrains dan korutinlarda multiplatforma HTTP mijoz. Retrofit — OkHttp asosida Square dan Android kutubxonasi. Ktor iOS, Android, JS va Native da ishlaydi, Retrofit esa faqat JVM da.

Ktor ni iOS da ishlatish mumkinmi?

Ha, Ktor iOS ni mahalliy URLSession dan foydalanadigan Darwin dvigateli orqali qo'llab-quvvatlaydi. Bu maksimal unumdorlik va iOS tizim keshi bilan to'g'ri ishlashni ta'minlaydi. Mijoz kodi platformalar o'rtasida umumiy bo'lib qoladi.

Ktor qanday dvigatellarni qo'llab-quvvatlaydi?

Ktor dvigatellarni qo'llab-quvvatlaydi: CIO (JVM/Android), Darwin (iOS/macOS), OkHttp (Android), Js (brauzer), Jetty, Netty, Tomcat (server). Dvigatel aniq tanlanishi yoki avtomatik tanlov qoldirilishi mumkin.

Ktor WebSocket ni qo'llab-quvvatlaydimi?

Ha, Ktor mijoz va server tomonida WebSocket uchun o'rnatilgan qo'llab-quvvatlashga ega. Mijoz uchun ikki tomonlama ulanish o'rnatish va real vaqtda xabar almashish imkonini beruvchi WebSockets plagini ishlatiladi.

Ktor da xatolarni qanday qayta ishlash kerak?

Xatolar suspend chaqiruvlari atrofida try-catch orqali qayta ishlanadi. Ktor 4xx uchun ClientRequestException, 5xx uchun ServerResponseException va tarmoq xatolari uchun IOException istisnolarini chiqaradi. Birlashtirish uchun Result tipidan foydalanish tavsiya etiladi.

Xulosa

  • Ktor — JetBrains dan Kotlin korutinlarida multiplatforma HTTP mijoz
  • Modulli arxitektura plaginlar bilan faqat kerakli funksiyalarni ulash imkonini beradi
  • Multiplatformalilik — bitta mijoz kodi iOS, Android, JVM, JS va Native da ishlaydi
  • Korutinlar chaqiruvlarsiz va oqimlarni bloklamasdan asinxron bajarilishni ta'minlaydi
  • Plaginlar ContentNegotiation, Logging va Auth install bloki orqali ulanadi
  • Dvigatellar CIO, Darwin va OkHttp Ktor ni har bir platformaga optimal moslashtiradi
  • Tanlov Ktor va Retrofit o'rtasida loyihaning multiplatformalilik ehtiyojiga bog'liq

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing