0Pricing
Android Academy · درس

Retrofit وواجهات REST API

أجروا طلبات HTTP باستخدام Retrofit. عرّفوا واجهات API، وحلّلوا JSON باستخدام Gson/Moshi، وتعاملوا مع الاستجابات والأخطاء، وادمجوا ذلك مع coroutines.

Retrofit وواجهات REST API درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 1 من أصل 6. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 6 دروس في المجموع.

ما هو Retrofit؟

إن Retrofit عميل HTTP الأكثر شيوعًا لنظام Android، وقد طوّرته Square. يتيح لك تعريف REST API على شكل واجهة Kotlin، من دون شيفرة HTTP متكررة.

  • أضف التعليقات التوضيحية @GET و@POST وغيرها إلى الأساليب
  • يحوّل استجابات JSON تلقائيًا إلى فئات بيانات Kotlin
  • دعم أصلي لـ coroutines (suspend fun)

إضافة الاعتماديات

أضف Retrofit ومحوّل Gson إلى app/build.gradle:

// app/build.gradle
dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.11.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
}

// AndroidManifest.xml — add internet permission:
// <uses-permission android:name="android.permission.INTERNET" />

تعريف واجهة API

أنشئ واجهة Kotlin تصف نقاط نهاية API الخاصة بك:

import retrofit2.http.*

data class Post(val id: Int, val title: String, val body: String, val userId: Int)

interface ApiService {

    @GET("posts")
    suspend fun getPosts(): List<Post>

    @GET("posts/{id}")
    suspend fun getPost(@Path("id") id: Int): Post

    @POST("posts")
    suspend fun createPost(@Body post: Post): Post

    @GET("posts")
    suspend fun getPostsByUser(@Query("userId") userId: Int): List<Post>
}

إنشاء مثيل Retrofit

أنشئ مثيل Retrofit وحيدًا، ويكون ذلك عادةً داخل object أو عبر Hilt:

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

object RetrofitClient {
    private const val BASE_URL = "https://jsonplaceholder.typicode.com/"

    val api: ApiService by lazy {
        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(ApiService::class.java)
    }
}

إجراء طلب GET

استدعِ API من Repository باستخدام Kotlin coroutines:

class PostRepository {
    private val api = RetrofitClient.api

    suspend fun getPosts(): List<Post> {
        return api.getPosts()  // Retrofit handles threading for you
    }

    suspend fun getPost(id: Int): Post {
        return api.getPost(id)
    }
}

// In ViewModel:
fun loadPosts() {
    viewModelScope.launch {
        try {
            val posts = withContext(Dispatchers.IO) {
                repository.getPosts()
            }
            _posts.value = posts
        } catch (e: Exception) {
            _error.value = "Network error: ${e.message}"
        }
    }
}

تعيين JSON باستخدام Gson

يحوّل Gson بيانات JSON إلى فئات بيانات Kotlin تلقائيًا. يجب أن تتطابق أسماء الحقول مع مفاتيح JSON، أو استخدم @SerializedName:

import com.google.gson.annotations.SerializedName

data class User(
    val id: Int,
    val name: String,
    val email: String,
    @SerializedName("phone_number")  // JSON key is 'phone_number'
    val phoneNumber: String,
    @SerializedName("created_at")
    val createdAt: String
)

طلب POST مع جسم الطلب

أرسل البيانات إلى خادم باستخدام @POST و@Body:

// API interface:
@POST("users")
suspend fun createUser(@Body user: User): User

// In Repository:
suspend fun createUser(name: String, email: String): User {
    val newUser = User(id = 0, name = name, email = email, phoneNumber = "", createdAt = "")
    return api.createUser(newUser)
}

// In ViewModel:
fun registerUser(name: String, email: String) {
    viewModelScope.launch {
        val user = withContext(Dispatchers.IO) {
            repo.createUser(name, email)
        }
        _registeredUser.value = user
    }
}

الرؤوس والمصادقة

أضف رؤوسًا إلى كل طلب باستخدام معترض OkHttp:

import okhttp3.OkHttpClient
import okhttp3.Interceptor

val authClient = OkHttpClient.Builder()
    .addInterceptor { chain ->
        val request = chain.request().newBuilder()
            .addHeader("Authorization", "Bearer $token")
            .addHeader("Accept", "application/json")
            .build()
        chain.proceed(request)
    }
    .build()

val retrofit = Retrofit.Builder()
    .baseUrl(BASE_URL)
    .client(authClient)  // use our authenticated client
    .addConverterFactory(GsonConverterFactory.create())
    .build()

معالجة أخطاء HTTP

تعيد استجابة HTTP الناجحة (200-299) قيمةً. أما استجابات الخطأ (4xx و5xx) فتطرح HttpException. عالج الحالتين دائمًا:

  • HttpException — أعاد الخادم رمز حالة خطأ
  • IOException — لا يوجد اتصال بالشبكة

تحقّق سريع

أي تعليق توضيحي في Retrofit يربط معامل الأسلوب بجزء من مسار URL مثل /posts/{id}؟

مراجعة: Retrofit وواجهات API

يمكنك الآن جلب البيانات من أي REST API:

  • عرّف API باستخدام واجهة Kotlin والتعليقات التوضيحية (@GET و@POST و@Path و@Query)
  • أنشئ مثيل Retrofit باستخدام عنوان URL أساسي ومحوّل Gson
  • استدعِ دوال suspend من coroutine في ViewModel
  • حوّل JSON إلى فئات بيانات Kotlin تلقائيًا
  • عالج HttpException وIOException

التالي: عرض صور الشبكة باستخدام Coil.

الأسئلة الشائعة

هل درس «Retrofit وواجهات REST API» مجاني؟

نعم — نص درس «Retrofit وواجهات REST API» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 6 دروس في المجموع.

ماذا ستتعلم في «Retrofit وواجهات REST API»؟

أجروا طلبات HTTP باستخدام Retrofit. عرّفوا واجهات API، وحلّلوا JSON باستخدام Gson/Moshi، وتعاملوا مع الاستجابات والأخطاء، وادمجوا ذلك مع coroutines. تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟

لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 6.

كم من الوقت يستغرق درس «Retrofit وواجهات REST API»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟

نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Retrofit وواجهات REST API
  2. تحميل الصور باستخدام Coil
  3. معالجة الأخطاء وتجربة المستخدم
  4. الإشعارات الفورية
  5. WorkManager والمهام في الخلفية
  6. النشر على Play Store
← العودة إلى Android Academy