عميل HTTP بلغة Kotlin: إجراء الطلبات بشكل صحيح

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة عن عملاء 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

المدونات

توصيات الكتب