عميل HTTP لـ Kotlin: أفضل المكتبات للعمل مع الشبكة
التطوير الحديث بلغة Kotlin لا يمكن تصوره دون التفاعل مع الخوادم البعيدة. سواء كان تطبيق Android، أو خلفية على Ktor، أو مشروع متعدد المنصات - فإن عملاء HTTP هم الأساس لتبادل البيانات. في هذه المقالة، سنستعرض أربع مكتبات رائدة لـ Kotlin: Ktor Client، OkHttp، Fuel و Retrofit. ستتعرف على ميزاتها ومزاياها وستحصل على أمثلة عملية للكود.
1. Ktor Client - الخيار الأصلي لـ Kotlin
Ktor Client هو عميل HTTP الرسمي من JetBrains، المصمم خصيصًا لنظام Kotlin البيئي. وهو غير متزامن بالكامل، ويعتمد على coroutines ويدعم تعدد المنصات (JVM، Android، iOS، JS، Native).
الميزات الرئيسية:
- دعم كامل لـ coroutines في Kotlin
- هندسة معيارية - قم بتوصيل الإضافات التي تحتاجها فقط (JSON، WebSockets، تسجيل)
- واجهة برمجة تطبيقات موحدة لجميع المنصات
- تسلسل مدمج عبر
kotlinx.serialization
مثال لطلب GET:
import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*
suspend fun fetchData(): String { val client = HttpClient() val response: HttpResponse = client.get("https://api.example.com/data") return response.bodyAsText()}متى تختاره: للمشاريع متعددة المنصات، والخدمات المصغرة على Ktor، وعند العمل مع coroutines.
2. OkHttp - المخضرم المثبت
OkHttp من Square هي واحدة من أشهر المكتبات لـ JVM و Android. على الرغم من أنها مكتوبة بلغة Java، إلا أنه من السهل استخدامها في Kotlin بفضل قابلية التشغيل البيني. تشتهر OkHttp بالسرعة، ومجموعة الاتصالات الفعالة، ومعترض الطلبات القوي.
الميزات الرئيسية:
- إدارة تلقائية للاتصالات (keep-alive، تجميع)
- ضغط GZIP شفاف
- دعم HTTP/2 و WebSocket
- Interceptor للتسجيل، التخزين المؤقت، إعادة المحاولة
مثال لطلب POST مع JSON:
import okhttp3.*import org.json.JSONObject
val client = OkHttpClient()
fun postJson(): String { val json = JSONObject().apply { put("name", "Kotlin") put("version", 2.0) } val body = json.toString().toRequestBody("application/json".toMediaType()) val request = Request.Builder() .url("https://api.example.com/items") .post(body) .build() return client.newCall(request).execute().body?.string() ?: ""}متى تختاره: لتطبيقات Android، عندما تحتاج إلى أقصى أداء ومرونة في الاعتراض.
3. Fuel - DSL أنيق لـ Kotlin
Fuel هي مكتبة خفيفة مع DSL معبر، مكتوبة بلغة Kotlin النقية. وهي مثالية للمشاريع الصغيرة والنماذج الأولية حيث تكون البساطة وقابلية قراءة الكود مهمة.
الميزات الرئيسية:
- DSL مدمج لبناء الطلبات
- دعم coroutines و RxJava
- إلغاء تسلسل تلقائي إلى فئات البيانات
- الحد الأدنى من التبعيات
مثال لطلب باستخدام DSL:
import com.github.kittinunf.fuel.httpGetimport com.github.kittinunf.fuel.core.FuelErrorimport com.github.kittinunf.result.Result
fun fuelExample() { val (request, response, result) = "https://api.example.com/users" .httpGet() .responseString() when (result) { is Result.Success -> println(result.get()) is Result.Failure -> println(result.error) }}متى تختاره: للنصوص البسيطة، والمشاريع التعليمية، أو عندما يكون DSL أكثر ملاءمة من الاستدعاءات القياسية.