آموزش استفاده از Retrofit 2 به عنوان REST client
در توسعه اپلیکیشنهای اندرویدی، ارتباط با سرور و دریافت یا ارسال دادهها (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 یک مهارت ضروری است.