ما هو Ktor Client؟
Ktor Client هو عميل HTTP غير متزامن (asynchronous) للغة البرمجة Kotlin، تم تطويره بواسطة شركة JetBrains. وهو جزء من إطار العمل Ktor، المصمم لبناء تطبيقات الخادم والعميل. يتيح Ktor Client إرسال طلبات HTTP (GET, POST, PUT, DELETE وغيرها) ومعالجة الردود، مع دعم العمل مع محركات مختلفة (OkHttp, Apache, CIO, Android، إلخ).
لماذا نحتاج Ktor Client؟
يُستخدم Ktor Client للتفاعل مع REST API، وتحميل البيانات من الإنترنت، وإرسال النماذج، والعمل مع WebSocket، وكذلك للتكامل مع الخدمات السحابية. وهو مكتوب بالكامل بلغة Kotlin، مما يضمن أمان الأنواع (type safety) وإيجاز الكود. بفضل دعم coroutines و Flow، يُعد Ktor Client مثالياً للتطبيقات غير المتزامنة والتفاعلية (reactive).
كيفية تثبيت Ktor Client؟
لاستخدام Ktor Client في مشروع Kotlin، أضف التبعيات (dependencies) إلى ملف build.gradle.kts:
dependencies { implementation("io.ktor:ktor-client-core:2.3.12") implementation("io.ktor:ktor-client-cio:2.3.12") // محرك CIO implementation("io.ktor:ktor-client-content-negotiation:2.3.12") // لـ JSON implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.12") // التسلسل (serialization)}إذا كنت تستخدم Maven، أضف التبعيات المقابلة في ملف pom.xml.
الوظائف الأساسية
- محركات متعددة: OkHttp, Apache, CIO, Android, iOS (Darwin), JavaScript.
- غير متزامن: دعم كامل لـ coroutines في Kotlin (دوال suspend).
- إضافات (Plugins): Content Negotiation (JSON/XML)، Logging، Auth (Basic, Bearer, OAuth)، Cookies، WebSocket.
- أمان الأنواع: التسلسل وإلغاء التسلسل عبر kotlinx.serialization.
- نقل البيانات (Streaming): العمل مع الملفات الكبيرة من خلال streaming.
مثال كود بلغة Kotlin
import io.ktor.client.*import io.ktor.client.engine.cio.*import io.ktor.client.request.*import io.ktor.client.statement.*import io.ktor.http.*import kotlinx.serialization.Serializableimport io.ktor.client.plugins.contentnegotiation.*import io.ktor.serialization.kotlinx.json.*
@Serializabledata class Post(val userId: Int, val id: Int, val title: String, val body: String)
suspend fun fetchPost(): Post { val client = HttpClient(CIO) { install(ContentNegotiation) { json() } } val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/posts/1") val post: Post = response.body() client.close() return post}
fun main() = runBlocking { val post = fetchPost() println("Title: ${post.title}")}متى نستخدم Ktor Client؟
يُوصى باستخدام Ktor Client في مشاريع Kotlin (JVM, Android, Native, JS) التي تتطلب عميل HTTP خفيف الوزن، وغير متزامن، وحديث. إنه مفيد بشكل خاص في الخدمات المصغرة (microservices)، وتطبيقات Android، والمشاريع متعددة المنصات (KMP)، وعند العمل مع Kotlin Coroutines. إذا كنت بحاجة إلى تكامل كامل مع النظام البيئي لـ Kotlin و JetBrains، فإن Ktor Client هو الخيار الأفضل.
```