تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ فائزه فریدونیان
سوال در مورد پروژه پیوست
میلاد عزیززاده حل شده توسط میلاد عزیززاده

با سلام و عرض ادب و احترام.

در پروژه پیوست، در کلاس 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 کنید در سرفصل مربوط به پروژه نایکی مثالی از اون زده شده و توضیحات مربوطه داده شده که در جلسه مربوطه اش به تسلط خواهید رسید.

 

پوریا شفیعی ۲۱ تیر ۱۴۰۰، ۰۵:۵۱