مقدمة عن عملاء HTTP في Kotlin
التطوير الحديث باستخدام Kotlin لا يمكن تصوره دون التفاعل مع واجهات برمجة التطبيقات البعيدة وخدمات الويب. عميل HTTP هو أداة أساسية تسمح لتطبيقك بإرسال الطلبات واستقبال الردود من الإنترنت. سواء كنت تقوم بإنشاء تطبيق جوال، أو خادم خلفي، أو تطبيق سطح مكتب، فإن القدرة على العمل بشكل صحيح مع طلبات HTTP هي مهارة إلزامية لكل مطور Kotlin.
في هذه المقالة، سنشرح بالتفصيل المكتبات المتاحة للعمل مع HTTP في نظام Kotlin البيئي، وكيفية إجراء طلبات GET و POST، ومعالجة JSON، وإدارة التزامن غير المتزامن. ستتعلم كيفية تجنب الأخطاء الشائعة وجعل كودك موثوقًا وفعالًا.
المكتبات الرئيسية لعملاء HTTP في Kotlin
1. Ktor Client
Ktor هو إطار عمل حديث غير متزامن تم إنشاؤه بواسطة شركة JetBrains خصيصًا لـ Kotlin. يدعم Ktor Client الكوروتينات، والتعددية المنصات (JVM، Android، iOS، JS، Native) ويوفر محركًا مرنًا قابلًا للتكوين.
مثال على طلب GET أساسي باستخدام Ktor:
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") client.close() return response.bodyAsText()}2. OkHttp
OkHttp هي واحدة من أشهر المكتبات لـ Java و Android، وتعمل بشكل ممتاز مع Kotlin أيضًا. تتميز بأداء عالٍ، ودعم HTTP/2، وتجمع اتصالات تلقائي، والمعترضات (interceptors).
مثال على طلب GET متزامن باستخدام OkHttp:
import okhttp3.OkHttpClientimport okhttp3.Request
fun fetchData(): String { val client = OkHttpClient() val request = Request.Builder() .url("https://api.example.com/data") .build() client.newCall(request).execute().use { response -> return response.body?.string() ?: "" }}3. Fuel
Fuel هي مكتبة خفيفة وبديهية لـ Kotlin، مبنية على أساس OkHttp. تقدم أسلوبًا وظيفيًا للعمل مع الطلبات ومعالجة مريحة للنتائج.
مثال على طلب GET باستخدام Fuel:
import com.github.kittinunf.fuel.httpGetimport com.github.kittinunf.result.Result
fun fetchData() { "https://api.example.com/data" .httpGet() .responseString { _, _, result -> when (result) { is Result.Success -> println(result.value) is Result.Failure -> println(result.error) } }}كيفية إرسال طلبات GET و POST بشكل صحيح
طلبات GET
تُستخدم طلبات GET للحصول على البيانات من الخادم. عادةً ما يتم تمرير معلمات الطلب في URL. عند استخدام Ktor، يمكن إضافة المعلمات من خلال كتلة parameter:
val client = HttpClient()val response = client.get("https://api.example.com/search") { parameter("query", "Kotlin") parameter("page", 1)}من المهم أن تتذكر: يجب ألا تغير طلبات GET حالة الخادم ويجب ألا تحتوي على نص طلب. يتم نقل جميع البيانات عبر URL أو الرؤوس.
طلبات POST
طلبات POST مخصصة لإرسال البيانات إلى الخادم (على سبيل المثال، إنشاء مورد جديد). يمكن أن يكون نص الطلب بتنسيق JSON، أو Form URL Encoded، أو Multipart.
مثال على طلب POST مع نص JSON باستخدام Ktor:
import io.ktor.client.request.*import io.ktor.http.*
data class User(val name: String, val email: String)
suspend fun createUser(user: User): String { val client = HttpClient() val response = client.post("https://api.example.com/users") { contentTyp