در پروژه پیوست، در کلاس Api برای رتروفیت از OkHttp استفاده شده در حالی که در بسیاری از مثالهای رتروفیت 2 OkHttp را شامل نمیشوند.
چرا و چه موقع باید از OkHttp در کلاس Api رتروفیت استفاده شود؟
با سپاس
سلام وقت بخیر
Retrofit یک wraper هست برای okhttp در واقع http client ما okhttp هست و ریکوئستها توسط این لایبرری ارسال میشن و retrofit یک لایه هست بر روی این لایبرری تا کدنویسی رو برای برنامه نویس آسونتر کنه
زمانی هم از instance این کلاس یعنی okhttp استفاده میکنیم که بخوایم یکسری شخصی سازی هایی روی ریکوئست هامون ایجاد کنیم که با استفاده از retrofit نمیتونیم انجامشون بدیم یا به سختی انجام میشن
بهترین پاسخ
میلاد عزیززاده۲۰ تیر ۱۴۰۰، ۲۰:۰۱
البته تو این جلسه ای که شما هستین ترکیب Rxjava با Retrofit اهمیت داره
میلاد عزیززاده۲۰ تیر ۱۴۰۰، ۲۰:۰۴
سلام وقت بخیر
رتروفیت در پشت زمینه از یه HttpClient استفاده میکند به نام OkHttp .
اگر بخواهید قبل از اینکه request به سرور ارسال شود تغییر روی request اعمال کنید (که هم برای responseها و هم requestها میشه اعمال کرد) لازم هست بر اساس Builder Pattern از OkHttpClient یک اینستنس بگیرید که در اصل ما یک request جدید رو میسازیم تا request اصلی رو تغییر بدیم این کار زمانی انجام میشه که شما بخواهید به عنوان مثال addHeader کنید و Token تون رو قرار بدید تا عمل Authorization رو انجام بدید .
برای اینکه با کلیت هم اشنا بشید کدش رو براتون قرار میدم:
val okHttpClient = OkHttpClient.Builder()
.addInterceptor {
val oldRequest = it.request()
val newRequestBuilder = oldRequest.newBuilder()
if (TokenContainer.token != null)
newRequestBuilder.addHeader("Authorization", "Bearer ${TokenContainer.token}")
newRequestBuilder.addHeader("Accept", "application/json")
newRequestBuilder.method(oldRequest.method, oldRequest.body)
return@addInterceptor it.proceed(newRequestBuilder.build())
}
.addInterceptor(HttpLoggingInterceptor().apply {
setLevel(HttpLoggingInterceptor.Level.BODY)
})
.build()
val retrofit = Retrofit.Builder()
.baseUrl("http://expertdevelopers.ir/api/v1/")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
return retrofit.create(ApiService::class)
البته این نکته رو بگم این که چه موقع باید از OkHttp کنید در سرفصل مربوط به پروژه نایکی مثالی از اون زده شده و توضیحات مربوطه داده شده که در جلسه مربوطه اش به تسلط خواهید رسید.