شروع 01 اولین قدم خیلی مهمه، خیلیا به خاطر ترس از شکست شروع نمیکنن
پس ترس رو بزار کنار و شروع کن
فقط شروع کن
تمرین و تکرار 02 خیلیا وارد حوزه برنامه نویسی میشن و به خاطر سختی هاش سریع جا میزنن و عقب میکشن
پس اگه میخوای موفق بشی فقط و فقط تمرین کن و پشتکار داشته باش
پشتکار
حرف اول و آخر رو میزنه
موفقیت 03 زمانی میتونی به این مرحله برسی که واقعا تلاش کرده باشی. برنامه نویسی واقعا راحت نیستش
اگه خوب تلاش کنی، مطمئن باش نتیجه زحماتت رو خیلی خوب دریافت میکنی
موفقیت رو باید به دست بیاری

وبلاگ

Interceptor چیه و چند نوع داریم

Interceptor چیه و چند نوع داریم
اندروید

Interceptor چیه و چند نوع داریم

Interceptor ها زمانی که اپلیکیشن های درست میکنی خیلی کمکت میکنن.

Interceptor چیه؟

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

یا اینکه میخوایم کاری کنیم که مثلا اگه درخواست ما با موفقیت انجام نشد، اون درخواست رو 3بار صدا بزنیم و اگر بعد از 3بار دوباره با مشکل روبرو شد، یه اروری به کاربر نشون بدیم.

اینجور مواقع از Interceptorهای استفاده میکنیم.

توی این پست میخوام به انواع اونا (اینترسپتورها) اشاره کنم.

این اینترسپتورها موقعی کاربرد دارن که از کتابخونه های تحت OkHttpClient استفاده کنی، مثل Retrofit

Interceptor چیه و چند نوع داریم
روند کار Interceptor
انواع Interceptorها در OkHttpClient :
1. Application Interceptors :

این اینترسپتورها بین کد ما و کتابخونه اصلی okhttp قرار میگیره و با addInterceptor() به سازنده OkHttpClient اضافه میشه.

2. Network Interceptors :

این اینترسپتورها هم بین کتابخونه اصلی okhttp و سرور قرار میگیره و داده ها رو رصد میکنه.

ساختار کلیه ساختاراینترسپتورها به شکله زیر هستش :

class MyInterceptor : Interceptor {

override fun intercept(chain: Interceptor.Chain): Response {

/**

* Our API Call will be intercepted here

*/

}

}

حالا به طور مثال به 2 مورد استفاده از اینترسپتورها رو خدمتتون توضیح میدم.
– میتونید برای مدیریت کدهای ریسپانس ها (401 ، 402، 403، و …) استفاده کنید مثل کد زیر :

class ErrorInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {

        val request: Request = chain.request()
        val response = chain.proceed(request)
        when (response.code()) {
            400 -> {
                //Show Bad Request Error Message
            }
            401 -> {
                //Show UnauthorizedError Message
            }

            403 -> {
                //Show Forbidden Message
            }

            404 -> {
                //Show NotFound Message
            }

            // ... and so on

        }
        return response
    }
}

– میتونید یکسری از Headerها عمومی رو به شکل زیر به همه درخواست هاتون اضافه کنید:

class HeaderInterceptor:Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        var request = chain.request()
        request = request.newBuilder()
            .addHeader("token",PrefUtils(AppClass.mContext).userToken)
        .build()
        return chain.proceed(request)
    }
}

نحوه استفاده ش هم اینطوریه که هر کدوم از کلاس های بالا رو که ساختین، میتونید به روش زیر توی OkHttpClient استفاده کنید :

private val apiClient = OkHttpClient().newBuilder().addInterceptor(HeaderInterceptor())
.build()

برای بالابردن راندمان و سرعت در رکوئست ها میتونید از قابلیت کش کردن رکوئست ها استفاده کنید.

معمولا توسط بک اند کار برای اینکه چند بار رکوئستی زده شد، هربار کوئری زده نشود انجام میشود که با header زیر درخواست میشود: Cache-Control
ولی اگه این قابلیت سمت سرور نیز فعال نشده باشد نیز میتوانیم سمت کلاینت این مورد رو مدیریت کنیم

برای اینکار کلاس زیر رو ایجاد میکنیم :

class CacheInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val response: Response = chain.proceed(chain.request())
        val cacheControl = CacheControl.Builder()
            .maxAge(10, TimeUnit.DAYS)
            .build()
        return response.newBuilder()
            .header("Cache-Control", cacheControl.toString())
            .build()
    }
}

بعد به سازنده OkHttpClient اضافه میکنیم :

private val apiClient = OkHttpClient().newBuilder().addNetworkInterceptor(CacheInterceptor()).build()

این Interceptor از نوع شبکه هستش چون توی لایه شبکه قرار میگیره.

دیدگاه خود را به ما بگویید

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

18 − 11 =

فیلدهای دلخواه برای نمایش را انتخاب کنید. سایر فیلدها مخفی می شود. برای ترتیب دلخواه فیلدها را به محل دلخواه بکشید و رها کنید.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
  • Attributes
  • Custom attributes
  • Custom fields
مقایسه
علاقمندی ها 0