مقالات

کتابخانه Retrofit در اندروید چیست و چگونه کار میکند؟ – ترولرن

Retrofit در اندروید یک کتابخانه محبوب در جامعه توسعه‌دهندگان اندروید است که فرآیند ارسال درخواست‌ها به سرویس‌های وب و پردازش پاسخ‌های آنها را ساده‌تر می‌کند. این کتابخانه به شما امکان ارتباط با API‌های RESTful را با یک رویکرد آسانتر فراهم می‌کند و به طور خودکار از پیچیدگی‌های مربوط به کدنویسی اتصال به سرور در اندروید کم میکند.

 

 

“ما را در اینستاگرام دنبال کنید”

در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم در مورد Retrofit در اندروید ، صحبت کنیم. پس با سایت ترولرن همراه باش.

“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”

توی دوره ژنرال صفر تا صد Retrofit در اندروید رو کامل توضیح دادیم و همچنین توی پروژه های دیجی کالا و اسنپ فود به صورت عملی و پروژه محور از آن استفاده کردیم و بطور کامل اون رو آموزش دادیم.

کتابخانه Retrofit در اندروید چیست؟

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

Retrofit بر پایه کتابخانه OkHttp که یک کتابخانه معروف دیگر در زمینه شبکه‌سازی است، ساخته شده است و با کاتلین و کروتینز یکپارچه می‌شود که آن را یک ابزار قدرتمند برای ساخت برنامه‌های اندرویدی مدرن و کارآمد می‌سازد.

ویژگی‌ها و مزایای Retrofit در اندروید

  • سادگی استفاده

Retrofit از یک رویکرد ساده برای تعریف و انجام درخواست‌های شبکه استفاده می‌کند. با تعریف یک رابط (interface) که متدهای مرتبط با درخواست‌های شبکه را تعیین کند، می‌توانید درخواست‌ها را به سرور فرستاده و نتایج را دریافت کنید.

  • انعطاف پذیری

Retrofit قابلیت پیکربندی متنوعی را در ارتباط با سرویس‌های وب فراهم می‌کند. می‌توانید از کنورترهای مختلفی مانند Gson یا Moshi برای تبدیل داده‌ها به شکل‌های مورد نیاز استفاده کنید.

  • اعتبارسنجی و احراز هویت

Retrofit مکانیسم‌های اعتبارسنجی و احراز هویت را نیز پشتیبانی می‌کند. می‌توانید به راحتی هدرها و پارامترهای مربوط به امنیت را به درخواست‌های خود اضافه کنید.

  • پشتیبانی از درخواست‌های شبکه موازی

با استفاده از Retrofit، می‌توانید درخواست‌های شبکه را به صورت موازی ارسال کنید و نتایج را به صورت همزمان دریافت کنید. این ویژگی می‌تواند عملکرد برنامه را بهبود بخشد و زمان اجرای درخواست‌ها را کاهش دهد.

  • پشتیبانی از RxJava

Retrofit با RxJava، کتابخانه‌ای برنامه‌نویسی راکتیو، هماهنگی خوبی دارد. این به شما امکان می‌دهد برنامه‌های راکتیو بر اساس رویدادها و جریان‌های داده بسازید و به صورت موثر با درخواست‌های شبکه کار کنید.

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

کتابخانه Retrofit در اندروید چطور کار می‌کند؟

کتابخانه Retrofit در اندروید برای ارتباط با سرویس‌های وب مبتنی بر RESTful در اندروید (و همچنین در جاوا) استفاده می‌شود. این کتابخانه از رویکردی ساده برای تعریف و انجام درخواست‌های شبکه استفاده می‌کند.

در زیر توضیحی اجمالی از نحوه کار Retrofit آمده است:

  • تعریف رابط

ابتدا باید یک رابط (interface) را برای تعریف درخواست‌های شبکه ایجاد کنید. در این رابط، متدهای مرتبط با درخواست‌های شبکه و نوع هر درخواست (GET، POST، PUT و غیره) را تعیین می‌کنید. همچنین می‌توانید پارامترها، هدرها و بدنه‌ی درخواست را تعیین کنید.

  • تنظیمات Retrofit

بعد از تعریف رابط، باید یک شیء از کلاس Retrofit را بسازید و تنظیمات مربوط به ارتباط را تعیین کنید. این تنظیمات شامل URL سرویس و تنظیمات مربوط به کنورترها (مثل Gson یا Moshi) است.

  • ایجاد شیء سرویس

با استفاده از شیء Retrofit، شما می‌توانید یک شیء از رابط تعریف شده را بسازید. این شیء به عنوان یک نماینده (proxy) برای ارتباط با سرویس‌های وب عمل می‌کند.

  • ارسال درخواست

با دسترسی به شیء سرویس، شما می‌توانید درخواست‌های شبکه را با فراخوانی متدهای مربوطه از رابط ارسال کنید. Retrofit خود به عهده می‌گیرد تا درخواست را به سرور ارسال کند، پاسخ را دریافت کند و آن را بر اساس تنظیمات مشخص شده تبدیل کند.

  • پردازش نتیجه

نتیجه‌ی دریافتی از سرور را می‌توانید در متد فراخواننده مورد استفاده قرار دهید و آن را براساس نیازهای برنامه‌ی خود پردازش کنید. معمولاً Retrofit از کنورترها برای تبدیل پاسخ به شیء مدل (POJO) استفاده می‌کند.

از ویژگی‌های Retrofit می‌توان به مدیریت خودکار جلسات (Session Management)، پشتیبانی از اعتبارسنجی و احراز هویت (Authentication)، ذخیره‌سازی نتایج سابقه (Caching) و پشتیبانی از مکالمه‌های موازی (Parallel Calls) اشاره کرد.

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

 

 

مثال ساده از کاربردهای کتابخانه Retrofit در اندروید

یک مثال ساده از کاربرد کتابخانه Retrofit در اندروید به همراه کاتلین،  Coroutines ، Flow و MVVM، می‌توانیم فرض کنیم که می‌خواهیم با استفاده از Retrofit، اطلاعاتی از یک سرویس وب را دریافت کرده و آنها را در یک رابط کاربری نمایش دهیم. در اینجا، برای سادگی، از رابطهای مربوط به یک سرویس وب مستقل استفاده نمی‌کنیم، بلکه از یک رابط ساده برای دریافت داده‌های تست استفاده خواهیم کرد.

  • تعریف رابط (Interface):

ابتدا باید یک رابط را برای تعریف درخواست‌های شبکه ایجاد کنیم. فرض کنید که رابطی به نام ApiService ایجاد کرده‌ایم که یک درخواست GET ساده برای دریافت یک مقدار رشته را انجام می‌دهد. کد زیر نمونه‌ای از این رابط را نشان می‌دهد:

interface ApiService {
    @GET("data")
    suspend fun fetchData(): Response<String>
}
  • ایجاد شیء Retrofit:

بعد از تعریف رابط، باید یک شیء از کلاس Retrofit را بسازیم و تنظیمات مربوط به ارتباط را تعیین کنیم. در اینجا فرض می‌کنیم که آدرس سرویس وب ما “http://example.com/api/” است. کد زیر نمونه‌ای از ایجاد شیء Retrofit را نشان می‌دهد:

val retrofit = Retrofit.Builder()
    .baseUrl("https://example.com/api/")
    .addConverterFactory(GsonConverterFactory.create())
    .build()

val apiService = retrofit.create(ApiService::class.java)
  • استفاده از کروتینز و Flow:

حالا که شیء سرویس را داریم، می‌توانیم از کروتینز و Flow برای فراخوانی درخواست‌های شبکه استفاده کنیم. فرض کنید که در یک ViewModel به نام MainViewModel قرار داریم و می‌خواهیم اطلاعات را دریافت کرده و در یک Flow نمایش دهیم. کد زیر نمونه‌ای از استفاده از کروتینز و Flow را نشان می‌دهد:

class MainViewModel : ViewModel() {
    private val _dataFlow = MutableStateFlow<Result<String>>(Result.Loading)

    val dataFlow: StateFlow<Result<String>> = _dataFlow

    fun fetchData() {
        viewModelScope.launch {
            try {
                val response = apiService.fetchData()
                if (response.isSuccessful) {
                    val data = response.body()
                    _dataFlow.value = Result.Success(data)
                } else {
                    _dataFlow.value = Result.Error(response.message())
                }
            } catch (e: Exception) {
                _dataFlow.value = Result.Error(e.message ?: "An error occurred")
            }
        }
    }
}
  • استفاده از MVVM:

حالا که ViewModel را داریم، می‌توانیم آن را در رابط کاربری (Activity یا Fragment) استفاده کنیم. در مثالبالا، ما از dataFlow استفاده کردیم که یک StateFlow از نوع Result<String> است. Result یک سری نوع است که می‌تواند شامل مقادیر Loading، Success یا Error باشد. مقادیر Loading، Success و Error به ازای وضعیت‌های مختلف دریافت داده‌ها استفاده می‌شوند.

در رابط کاربری، شما می‌توانید به شکل زیر از ViewModel و Flow استفاده کنید:

class MainActivity : AppCompatActivity() {
    private lateinit var viewModel: MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)

        viewModel.dataFlow.observe(this) { result ->
            when (result) {
                is Result.Loading -> showLoading()
                is Result.Success -> showData(result.data)
                is Result.Error -> showError(result.errorMessage)
            }
        }

        fetchDataButton.setOnClickListener {
            viewModel.fetchData()
        }
    }

    private fun showLoading() {
        // نمایش لودینگ
    }

    private fun showData(data: String) {
        // نمایش داده‌ها
    }

    private fun showError(errorMessage: String) {
        // نمایش خطا
    }
}

در این مثال، ما dataFlow را در onCreate Activity نظارت می‌کنیم و بر اساس وضعیت آن، عملیات مربوطه را انجام می‌دهیم. همچنین با کلیک بر روی دکمه fetchDataButton، متد fetchData در ViewModel فراخوانی می‌شود تا درخواست شبکه انجام شود.

این یک مثال ساده از کاربرد کتابخانه Retrofit با استفاده از کاتلین، کروتینز و Flow و MVVM است. البته برای استفاده کامل از کلیه امکانات Retrofit و الگوی MVVM، می‌توانید به مثال‌ها و منابع بیشتری مراجعه کنید.

حرف آخر

در نتیجه، Retrofit در اندروید یک کتابخانه قدرتمند برای ارتباط با سرویس‌های وب در برنامه‌های اندرویدی است. با استفاده از Retrofit، می‌توانید با کمترین تلاش و کدنویسی، درخواست‌های شبکه را به سادگی ارسال کرده و پاسخ‌های آنها را به طور موثر و کارآمد پردازش کنید. این کتابخانه با ارائه امکاناتی مانند تعریف رابط‌های شبکه، مدیریت خطاها، تبدیل داده‌ها و پشتیبانی از کاتلین و کروتینز، تجربه توسعه‌دهندگان را بهبود می‌بخشد و فرآیند توسعه برنامه‌های ارتباطی را ساده‌تر و خواناتر می‌کند. با استفاده از Retrofit، می‌توانید به سرعت و کارآمدی بالا، به نیازهای شبکه در برنامه‌های اندرویدی خود پاسخ دهید و تجربه کاربری بهتری را برای کاربران خود فراهم کنید.

و همچنین ممنون میشم از طریق ستاره‌های این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.

‫5/5 ‫(1 نظر)
عاطفه امیری

Recent Posts

چگونه دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را ارتقاء دهد؟

دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را با بهره‌گیری از ابزارها و فناوری‌های مدرن…

4 ماه ago

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید این است که سایر زبان‌ها، از…

5 ماه ago

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید: راهنمای جامع و کاربردی

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید یکی از مهم‌ترین فاکتورهایی است که برای کاربران در دنیای امروز…

10 ماه ago

سوالات مصاحبه‌ی استخدامی کاتلین همراه با جواب(قسمت چهارم)

مصاحبه‌ی استخدامی کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

11 ماه ago

سوالات مصاحبه استخدام زبان کاتلین همراه با جواب(قسمت سوم)

مصاحبه استخدام زبان کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه…

11 ماه ago

سوالات مصاحبه استخدام کاتلین همراه با جواب(قسمت دوم)

مصاحبه استخدام کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

11 ماه ago