برنامه‌نویسی اندروید

آموزش استفاده از Retrofit 2 به عنوان REST client

آموزش استفاده از Retrofit 2

در توسعه اپلیکیشن‌های اندرویدی، ارتباط با سرور و دریافت یا ارسال داده‌ها (API) یکی از مهم‌ترین بخش‌هاست. برای این کار ابزارهای مختلفی وجود دارد، اما یکی از محبوب‌ترین و حرفه‌ای‌ترین آن‌ها Retrofit است که توسط Square توسعه داده شده است.

در این مقاله، به‌صورت کامل و عملی یاد می‌گیرید چگونه از Retrofit 2 برای ارتباط با API استفاده کنید.

🎯 Retrofit چیست؟

Retrofit یک کتابخانه قدرتمند برای تبدیل درخواست‌های HTTP به متدهای ساده در کاتلین یا جاوا است. به‌جای نوشتن کدهای پیچیده برای مدیریت درخواست‌ها، شما فقط Interface تعریف می‌کنید و Retrofit بقیه کارها را انجام می‌دهد.

⚙️ مزایای Retrofit

  • ساده‌سازی ارتباط با API
  • پشتیبانی از JSON و XML
  • ادغام آسان با Coroutine
  • قابلیت اتصال با کتابخانه‌هایی مثل OkHttp
  • خوانایی بالا و کاهش Boilerplate

📦 افزودن Retrofit به پروژه

در فایل build.gradle:

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

🧩 مرحله 1: ساخت مدل داده (Data Model)

فرض کنید API زیر را داریم:

https://jsonplaceholder.typicode.com/posts

مدل داده:

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

🌐 مرحله 2: تعریف Interface API

import retrofit2.Call
import retrofit2.http.GET

interface ApiService {

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

🏗 مرحله 3: ساخت Retrofit Instance

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

object RetrofitInstance {

    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)
    }
}

📡 مرحله 4: ارسال درخواست و دریافت داده

RetrofitInstance.api.getPosts().enqueue(object : Callback<List<Post>> {

    override fun onResponse(
        call: Call<List<Post>>,
        response: Response<List<Post>>
    ) {
        if (response.isSuccessful) {
            val posts = response.body()
            println(posts)
        }
    }

    override fun onFailure(call: Call<List<Post>>, t: Throwable) {
        println("Error: ${t.message}")
    }
})

⚡ استفاده با Kotlin Coroutines (روش حرفه‌ای)

به جای Callback:

Interface:

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

استفاده:

lifecycleScope.launch {
    try {
        val posts = RetrofitInstance.api.getPosts()
        println(posts)
    } catch (e: Exception) {
        println("Error: ${e.message}")
    }
}

🔐 ارسال داده (POST Request)

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

استفاده:

val newPost = Post(1, 0, "Title", "Body")

val response = api.createPost(newPost)

🧠 نکات حرفه‌ای

🔹 استفاده از OkHttp Interceptor

برای اضافه کردن Header:

val client = OkHttpClient.Builder()
    .addInterceptor { chain ->
        val request = chain.request().newBuilder()
            .addHeader("Authorization", "Bearer token")
            .build()
        chain.proceed(request)
    }
    .build()

🔹 مدیریت خطاها

if (!response.isSuccessful) {
    println("Error code: ${response.code()}")
}

🔹 Timeout

OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS)

🏗 معماری پیشنهادی

Retrofit را در لایه Data استفاده کنید:

  • Repository
  • ViewModel
  • UI

🆚 Retrofit vs Volley

ویژگی Retrofit Volley
سادگی بالا متوسط
Coroutine
JSON Parsing خودکار دستی

🏁 جمع‌بندی

کتابخانه Retrofit یکی از بهترین انتخاب‌ها برای کار با API در اندروید است. این ابزار با ساده‌سازی درخواست‌های شبکه، به شما کمک می‌کند کدی تمیز، قابل نگهداری و حرفه‌ای بنویسید.

اگر به دنبال ساخت اپلیکیشن‌های مدرن هستید، یادگیری Retrofit یک مهارت ضروری است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *