Ktor — کلیدی تصورات، کلائنٹ لائبریری اور Kotlin Multiplatform

مصنف: IT Sectr اشاعت: 2026-05-05 مطالعے کا وقت: 8 منٹ

Ktor ایک غیر مطابقت پذیر HTTP کلائنٹ اور سرور فریم ورک ہے Kotlin کے لیے جو ملٹی پلیٹ فارم ڈیولپمنٹ کو سپورٹ کرتا ہے۔ لائبریری Kotlin coroutines پر بنائی گئی ہے اور JVM، iOS، Android، JS اور Native پر کام کرتی ہے۔ GitHub پر Ktor ذخیرے کے مطابق، یہ منصوبہ JetBrains ٹیم کے ذریعے فعال طور پر تیار کیا جا رہا ہے۔ Ktor HTTP کنکشنز کی لچکدار ترتیب کے لیے پلگ ان سسٹم کے ساتھ ماڈیولر آرکیٹیکچر پیش کرتا ہے۔

اہم نکات

  • Ktor — ملٹی پلیٹ فارم سپورٹ کے ساتھ Kotlin کے لیے JetBrains کا HTTP کلائنٹ اور سرور
  • Kotlin coroutines کال بیک کے بغیر غیر مطابقت پذیر درخواستوں پر عملدرآمد فراہم کرتے ہیں
  • پلگ ان آرکیٹیکچر لاگنگ، سیریلائزیشن اور تصدیق شامل کرنے کی اجازت دیتا ہے
  • ملٹی پلیٹ فارم — ایک کوڈ iOS، Android، JVM، JS اور Native پر کام کرتا ہے
  • مواد کا تعاون خود بخود JSON میں ڈیٹا کو سیریلائز اور ڈی سیریلائز کرتا ہے

Ktor کیا ہے؟

Ktor ایک فریم ورک ہے Kotlin میں HTTP کلائنٹ اور سرور بنانے کے لیے، جسے JetBrains نے تیار کیا ہے۔ روایتی لائبریریوں کے برعکس، Ktor شروع سے ہی ملٹی پلیٹ فارم ڈیولپمنٹ کے لیے ڈیزائن کیا گیا تھا اور یہ Kotlin کے تعاون یافتہ تمام پلیٹ فارمز پر کام کرتا ہے۔

Ktor ایک مڈل ویئر ہینڈلر طریقہ استعمال کرتا ہے، جو Kodein اور Express.js کے آرکیٹیکچر سے متاثر ہے۔ ہر درخواست ہینڈلر فنکشنز کی پائپ لائن سے گزرتی ہے جو درخواست اور جواب میں تبدیلی کر سکتے ہیں۔ یہ ان لائبریریوں میں دستیاب نہ ہونے والی لچک فراہم کرتا ہے جن کا سخت اینوٹیشن پر مبنی آرکیٹیکچر ہوتا ہے۔

موجودہ ورژن Ktor 3.0 میں Kotlin 2.0، K2 کمپائلر اور بہتر کارکردگی کے ساتھ نئے CIO (Coroutine I/O) انجن کے لیے سپورٹ شامل ہے۔ لائبریری Apache 2.0 لائسنس کے تحت تقسیم کی جاتی ہے اور بغیر کسی پابندی کے تجارتی استعمال کے لیے دستیاب ہے۔

Ktor کا کلائنٹ سائیڈ مکمل طور پر Kotlin coroutines پر بنایا گیا ہے، جو تھریڈ بلاک کیے بغیر موثر غیر مطابقت پذیر درخواستوں پر عملدرآمد فراہم کرتا ہے۔ سرور سائیڈ روٹنگ، درخواستوں کی پروسیسنگ اور WebSocket کنکشنز کے ساتھ HTTP سرور بنانے کی اجازت دیتا ہے۔

Ktor پلگ ان آرکیٹیکچر استعمال کرتا ہے: تمام اضافی خصوصیات — لاگنگ، سیریلائزیشن، تصدیق — پلگ ان کے ذریعے منسلک ہوتی ہیں۔ یہ لائبریری کو ماڈیولر بناتا ہے اور صرف ضروری اجزاء کو منسلک کرنے کی اجازت دیتا ہے، جس سے حتمی ایپلیکیشن کا سائز کم ہوتا ہے۔

تمام پلیٹ فارمز پر متحد API کی بدولت، ڈیولپر کو iOS اور Android کے لیے مختلف HTTP کلائنٹ سیکھنے کی ضرورت نہیں ہے۔ ملٹی پلیٹ فارم منصوبے میں، نیٹ ورک پرت کا کوڈ مکمل طور پر مشترکہ ہوتا ہے، اور پلیٹ فارم کے لیے مخصوص نفاذ HttpClient انجن کے پیچھے چھپا ہوتا ہے۔ اس سے ڈیولپمنٹ کا وقت کم ہوتا ہے اور پلیٹ فارم کے فرق سے متعلق غلطیوں کی تعداد میں کمی آتی ہے۔

Ktor کی اہم خصوصیات

Ktor خصوصیات کا ایک سیٹ فراہم کرتا ہے جو اسے جدید Kotlin منصوبوں، خاص طور پر ملٹی پلیٹ فارم منصوبوں کے لیے ایک پرکشش انتخاب بناتا ہے۔

ملٹی پلیٹ فارم سپورٹ

Ktor JVM، Android، iOS، macOS، Windows، Linux، JavaScript اور Wasm پر کام کرتا ہے۔ وہی HTTP کلائنٹ کوڈ بغیر تبدیلی کے تمام پلیٹ فارمز پر چلتا ہے۔ یہ OkHttp یا URLSession سے منسلک لائبریریوں پر ایک اہم فائدہ ہے۔

Coroutines کے ساتھ غیر مطابقت پذیر

Kotlin میں coroutines کال بیک کے بغیر قدرتی غیر مطابقت پذیری فراہم کرتے ہیں۔ ہر درخواست ایک suspend فنکشن ہے جسے کسی بھی coroutine سے بلایا جا سکتا ہے۔ Ktor Flow کے ذریعے جوابات کی سٹریمنگ کو سپورٹ کرتا ہے، جو طویل کنکشنز اور WebSocket کے لیے آسان ہے۔

پلگ ان آرکیٹیکچر

Ktor پلگ ان install بلاک کے ذریعے منسلک ہوتے ہیں اور علیحدہ سے ترتیب دیے جاتے ہیں۔ اہم پلگ ان: سیریلائزیشن کے لیے ContentNegotiation، لاگنگ کے لیے Logging، تصدیق کے لیے Auth اور دو طرفہ مواصلات کے لیے WebSockets۔ ہر پلگ ان کو آزادانہ طور پر فعال یا غیر فعال کیا جا سکتا ہے۔

غلطیوں کا انتظام اور ٹائم آؤٹ

Ktor میں غلطیوں کا انتظام استثنیات پر مبنی ہے۔ ClientRequestException کلاس 4xx کوڈز کے لیے، ServerResponseException 5xx کے لیے اور IOException نیٹ ورک کی ناکامیوں کے لیے پھینکی جاتی ہے۔ ٹائم آؤٹ HttpTimeout پلگ ان کے ذریعے ترتیب دیے جاتے ہیں، جو کنکشن، پڑھنے اور لکھنے کے لیے انتظار کا وقت مقرر کرتا ہے۔ دوبارہ کوشش کے لیے Retry پلگ ان استعمال ہوتا ہے جس میں کوششوں کی تعداد اور تاخیر کی ترتیبات ہوتی ہیں۔

Ktor کیسے کام کرتا ہے؟

Ktor پائپ لائن آرکیٹیکچر استعمال کرتا ہے جہاں ہر درخواست ہینڈلرز کی ایک زنجیر سے گزرتی ہے۔ کلائنٹ انسٹال کردہ پلگ ان کے ساتھ HttpClient کنفیگریشن بناتا ہے، اور get یا post کی ہر کال پلگ ان کے ذریعے ان کے منسلک ہونے کی ترتیب میں گزرتی ہے۔

HttpClient آرکیٹیکچر

HttpClient آبجیکٹ پلیٹ فارم کے لیے مخصوص انجن کے ساتھ بنایا جاتا ہے: JVM اور Android کے لیے CIO، iOS اور macOS کے لیے Darwin، Android مطابقت کے لیے OkHttp، براؤزر کے لیے Js۔ انجن کو واضح طور پر منتخب کیا جا سکتا ہے یا خودکار انتخاب پر چھوڑا جا سکتا ہے۔ ہر درخواست HttpResponse لوٹاتی ہے جس میں جواب کا باڈی، ہیڈر اور حیثیت شامل ہوتی ہے۔

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 کی تنصیب اور ترتیب

Ktor کی تنصیب Gradle یا Maven کے ذریعے کی جاتی ہے۔ ملٹی پلیٹ فارم منصوبوں کے لیے، انحصار ہر ہدف کے لیے sourceSets میں بتائے جاتے ہیں۔ Ktor Maven Central کے ذریعے تقسیم کیا جاتا ہے۔

Gradle کے ذریعے کنکشن

build.gradle.kts میں، مشترکہ کوڈ کے لیے ktor-client-core انحصار اور مخصوص پلیٹ فارم کے لیے ایک انجن شامل کریں۔ Ktor ورژن gradle.properties میں ایک متغیر کے ذریعے سیٹ کیا جاتا ہے۔ Ktor 3.x کو Kotlin 2.0+ کی ضرورت ہے اور یہ K2 کمپائلر کو سپورٹ کرتا ہے۔

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 کے لیے ترتیب

iOS کے لیے، Darwin انجن استعمال ہوتا ہے جو مقامی URLSession کو لپیٹتا ہے۔ Kotlin Multiplatform میں، یہ زیادہ سے زیادہ کارکردگی اور iOS سسٹم کیشنگ میکانزم کے ساتھ انضمام فراہم کرتا ہے۔ انجن iOS sourceSet میں ایک علیحدہ انحصار کے طور پر شامل کیا جاتا ہے۔

Ktor کی ایک اہم خصوصیت ContentNegotiation کے ذریعے مختلف سیریلائزیشن فارمیٹس کی سپورٹ ہے۔ JSON کے علاوہ، پلگ ان Protobuf، CBOR، XML اور حسب ضرورت فارمیٹس کو سپورٹ کرتا ہے۔ سیریلائزیشن کے لیے kotlinx.serialization یا Jackson لائبریریاں استعمال ہوتی ہیں، اور ڈیولپر درخواست کے کوڈ کو تبدیل کیے بغیر ان کے درمیان سوئچ کر سکتا ہے۔

Ktor استعمال کی مثالیں

نیچے دی گئی مثالیں Ktor کلائنٹ کے ساتھ کام کرنے کے عام منظرناموں کو ظاہر کرتی ہیں: بنیادی GET درخواست، ڈیٹا بھیجنا اور ملٹی پلیٹ فارم کوڈ کے ساتھ کام کرنا۔

JSON ڈی سیریلائزیشن کے ساتھ GET درخواست

ایک سادہ GET درخواست جس میں جواب کا ڈیٹا کلاس میں خودکار ڈی سیریلائزیشن ہوتا ہے۔ Ktor JSON کو آبجیکٹ میں تبدیل کرنے کے لیے kotlinx.serialization کے ساتھ ContentNegotiation پلگ ان استعمال کرتا ہے۔ کوڈ مختصر اور ٹائپ سیف ہے۔

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 باڈی کے ساتھ POST درخواست

Ktor میں POST درخواست contentType اور setBody کے ساتھ post طریقہ کے ذریعے ڈیٹا کلاس کو JSON باڈی کے طور پر بھیجتی ہے۔ ContentNegotiation پلگ ان خود بخود آبجیکٹ کو JSON سٹرنگ میں سیریلائز کرتا ہے۔ جواب کو ہم وقت یا غیر ہم وقت طریقے سے پروسیس کیا جا سکتا ہے۔

kotlin
suspend fun createPost(): Post {
    val newPost = Post(
        id = 0,
        title = "نئی پوسٹ",
        body = "پوسٹ کا مواد"
    )
    val response = client.post("https://jsonplaceholder.typicode.com/posts") {
        contentType(ContentType.Application.Json)
        setBody(newPost)
    }
    return response.body()
}

Multipart کے ذریعے فائل اپ لوڈ

Ktor میں submitFormWithBinaryData طریقہ multipart فارمیٹ میں فائلیں اور فارم بھیجنے کی اجازت دیتا ہے۔ Ktor خود بخود ڈیٹا کو حصوں میں تقسیم کرتا ہے اور ہیڈر شامل کرتا ہے۔ پیشرفت کو ٹریک کرنے کے لیے onUpload استعمال ہوتا ہے، جو بھیجے گئے ڈیٹا کے بائٹس وصول کرتا ہے۔

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 یا Retrofit: کیا منتخب کریں؟

انتخاب Ktor اور Retrofit کے درمیان منصوبے کے آرکیٹیکچر اور ملٹی پلیٹ فارم کی ضروریات پر منحصر ہے۔ Retrofit صرف Android منصوبوں کے لیے معیار بنا ہوا ہے، جبکہ Ktor Kotlin Multiplatform کے لیے بہترین انتخاب ہے۔

Ktor WebSocket اور SSE (Server-Sent Events) کے لیے بلٹ ان سپورٹ بھی فراہم کرتا ہے، جو اسے ریئل ٹائم ایپلیکیشنز کے لیے آسان بناتا ہے۔ Retrofit براہ راست WebSocket کو سپورٹ نہیں کرتا — اس کے لیے علیحدہ OkHttp WebSocket لائبریری کی ضرورت ہے۔ Ktor اپنے پلگ ان سسٹم کی بدولت مختلف ماحول کے لیے ترتیب دینا بھی آسان ہے، جہاں ہر پلگ ان ایک فنکشن کے لیے ذمہ دار ہے۔

Ktor میں تصدیق

Ktor میں Auth پلگ ان بنیادی تصدیق، Bearer ٹوکن، Digest اور OAuth2 کو سپورٹ کرتا ہے۔ تصدیق کی ترتیب اعلانیہ طور پر کی جاتی ہے: ڈیولپر فراہم کنندہ، ٹوکن ماخذ اور دائرہ کار بتاتا ہے۔ Ktor خود بخود درخواستوں میں تصدیق کے ہیڈر شامل کرتا ہے اور ٹوکن کی میعاد ختم ہونے پر اسے ریفریش کر سکتا ہے۔

اگر کوئی منصوبہ iOS اور Android پر مشترکہ کوڈ کے ساتھ Kotlin Multiplatform استعمال کرتا ہے، تو Ktor واحد آپشن ہے جو اضافی پرتوں کے بغیر دونوں پلیٹ فارمز پر کام کرتا ہے۔ Retrofit OkHttp اور JVM سے مضبوطی سے جڑا ہوا ہے، جو اسے iOS کے لیے نا مناسب بناتا ہے۔

صرف Android منصوبوں کے لیے، Retrofit ایک زیادہ پختہ API، زیادہ تعداد میں کنورٹر اور OkHttp انٹرسیپٹر فراہم کرتا ہے۔ Ktor اس منظرنامے میں بھی کام کرتا ہے، لیکن اس کا پلگ ان ماحولیاتی نظام کم وسیع ہے۔ دونوں لائبریریاں coroutines کو سپورٹ کرتی ہیں اور موازنہ کارکردگی دیتی ہیں۔

معیارKtorRetrofit
ملٹی پلیٹ فارمiOS، Android، JVM، JS، Nativeصرف JVM اور Android
HTTP انجنCIO، Darwin، OkHttp، JsOkHttp
کنورٹرزkotlinx.serialization، JacksonGson، Moshi، Jackson، Protobuf
آرکیٹیکچرپلگ ان کے ساتھ پائپ لائنکوڈ جنریشن کے ساتھ اینوٹیشنز
ڈیولپرJetBrainsSquare

اکثر پوچھے گئے سوالات

Ktor Retrofit سے کیسے مختلف ہے؟

Ktor — JetBrains کا coroutines پر ملٹی پلیٹ فارم HTTP کلائنٹ۔ Retrofit — OkHttp پر مبنی Square کی Android لائبریری۔ Ktor iOS، Android، JS اور Native پر کام کرتا ہے، جبکہ Retrofit صرف JVM پر کام کرتا ہے۔

کیا Ktor iOS پر استعمال کیا جا سکتا ہے؟

ہاں، Ktor Darwin انجن کے ذریعے iOS کو سپورٹ کرتا ہے جو مقامی URLSession استعمال کرتا ہے۔ یہ زیادہ سے زیادہ کارکردگی اور iOS سسٹم کیشے کے ساتھ درست کام کو یقینی بناتا ہے۔ کلائنٹ کوڈ پلیٹ فارمز کے درمیان مشترکہ رہتا ہے۔

Ktor کن انجنوں کو سپورٹ کرتا ہے؟

Ktor انجنوں کو سپورٹ کرتا ہے: CIO (JVM/Android)، Darwin (iOS/macOS)، OkHttp (Android)، Js (براؤزر)، Jetty، Netty، Tomcat (سرور)۔ انجن کو واضح طور پر منتخب کیا جا سکتا ہے یا ڈیفالٹ خودکار انتخاب پر چھوڑا جا سکتا ہے۔

کیا Ktor WebSocket کو سپورٹ کرتا ہے؟

ہاں، Ktor کے پاس کلائنٹ اور سرور دونوں طرف WebSocket کے لیے بلٹ ان سپورٹ ہے۔ کلائنٹ کے لیے WebSockets پلگ ان استعمال ہوتا ہے، جو دو طرفہ کنکشن قائم کرنے اور ریئل ٹائم میں پیغامات کے تبادلے کی اجازت دیتا ہے۔

Ktor میں غلطیوں کو کیسے ہینڈل کریں؟

غلطیاں suspend کالز کے ارد گرد try-catch کے ذریعے ہینڈل کی جاتی ہیں۔ Ktor 4xx کے لیے ClientRequestException، 5xx کے لیے ServerResponseException اور نیٹ ورک کی غلطیوں کے لیے IOException پھینکتا ہے۔ یکسانیت کے لیے Result ٹائپ استعمال کرنے کی سفارش کی جاتی ہے۔

خلاصہ

  • Ktor — JetBrains کا Kotlin coroutines پر ملٹی پلیٹ فارم HTTP کلائنٹ
  • ماڈیولر آرکیٹیکچر پلگ ان کے ساتھ صرف ضروری خصوصیات کو جوڑنے کی اجازت دیتا ہے
  • ملٹی پلیٹ فارم — ایک کلائنٹ کوڈ iOS، Android، JVM، JS اور Native پر کام کرتا ہے
  • Coroutines کال بیک اور تھریڈ بلاک کیے بغیر غیر مطابقت پذیر عملدرآمد فراہم کرتے ہیں
  • پلگ ان ContentNegotiation، Logging اور Auth install بلاک کے ذریعے منسلک ہوتے ہیں
  • انجن CIO، Darwin اور OkHttp Ktor کو ہر پلیٹ فارم کے لیے بہترین طور پر ڈھالتے ہیں
  • انتخاب Ktor اور Retrofit کے درمیان منصوبے کی ملٹی پلیٹ فارم ضرورت پر منحصر ہے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں