<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Saeed Bahari</title>
        <link>https://virgool.io/feed/@SaeedBahari</link>
        <description>برنامه نویس ارشد اندروید https://www.linkedin.com/in/saeed-bahari/</description>
        <language>fa</language>
        <pubDate>2026-06-07 11:12:22</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/172107/avatar/owCzIv.png?height=120&amp;width=120</url>
            <title>Saeed Bahari</title>
            <link>https://virgool.io/@SaeedBahari</link>
        </image>

                    <item>
                <title>انواع Interceptor ها در OkHttpClient</title>
                <link>https://virgool.io/MobileLab/%D8%A7%D9%86%D9%88%D8%A7%D8%B9-interceptor-%D9%87%D8%A7-%D8%AF%D8%B1-okhttpclient-e8u12hpngu8e</link>
                <description>با سلام خدمت دوستان.یک هفته پیش طی یک مصاحبه کاری که داشتم(البته هنوز هم جایی مشغول نشدم! ) مصاحبه کننده یک سوالی پرسید که جوابی که دادم فکر کردم درست هست ولی ته ذهنم باقی موند تا خودم دقیقتر سرچ بزنم درموردش که نتیجه اش این مطلبی هست که مطالعه می کنید.سوال این بود:  چند نوع OkHttp Interceptors داریم؟با اینکه زیاد باهاشون کار کرده بودم ولی نمیدونستم که چند نوع هستن دقیقا که الان خدمتتون عرض میکنم:  اولا یه تعریف ساده از خودش داشته باشیم تا بعد به جواب سوال بپردازیمتعریف:مکانیسمی برای monitor, rewrite, and retry برای صدا زدن API   ها هست.حالا جواب سوالمون تو تصویر بالا هست: نوع اول Application Interceptorsاین Interceptor  ها بین کد شما و کتابخونه okhttp core  هست و با addInterceptor()  به سازنده OkHttpClientاضافه میشه.نوع دوم Network Interceptorsاین Interceptor  ها هم بین کتابخونه okhttp core و سرور قرار میگیره و داده ها رو رصد میکنه.برای ایجاد یک interceptor  به این طریق عمل میکنیم:class MyInterceptor : Interceptor {override fun intercept(chain: Interceptor.Chain): Response {/*** Our API Call will be intercepted here*/}}حالا به طور مثال به دو مورد از استفاده از Interceptor هارو خدمتتون میگم - میتونید برای مدیریت کدهای ریسپانس ها (401 ، 402، 403، ...) استفاده کنید مثل کد موجود در لینک زیرhttps://gist.github.com/SaeedBahari/cab424176a59df693bd1e050e8703d8a- برای افزودن Header به همه درخواست هاتون استفاده کنید مثل لینک زیر:https://gist.github.com/SaeedBahari/cfc55eaf9ebea681e658d177a0690ad9حالا هر کدوم از کلاس های بالا رو که ساختین به سازنده OkHttpClient  میتونید به روش زیر استفاده کنید:private val apiClient = OkHttpClient().newBuilder().addInterceptor(HeaderInterceptor())  .build()برای بالابردن راندمان و سرعت در رکوئست ها میتونید از قابلیت کش کردن رکوئست ها استفاده کنید. معمولا توسط بک اند کار برای اینکه چند بار رکوئستی زده شد، هربار کوئری زده نشود انجام میشودکه با header زیر درخواست می شود: Cache-Control ولی اگه این قابلیت سمت سرور نیز فعال نشده باشد نیز میتوانیم سمت کلاینت این مورد رو مدیریت کنیمبرای اینکار کلاس زیر رو ایجاد میکنیم: https://gist.github.com/SaeedBahari/0fe4da9e53aa9c8ebb9e598d1e16de2bبعد به سازنده OkHttpClient اضافه میکنیم:private val apiClient = OkHttpClient().newBuilder().addNetworkInterceptor(CacheInterceptor())  .build()این Interceptor  از نوع شبکه می باشد چون در لایه شبکه قرار میگیره.میتونید از مقاله زیر هم که منبعی برای توضیحات من بود استفاده کنید که چند تا روش دیگر استفاده از این مکانیسم رو مثال زده.https://blog.mindorks.com/okhttp-interceptor-making-the-most-of-it</description>
                <category>Saeed Bahari</category>
                <author>Saeed Bahari</author>
                <pubDate>Fri, 06 Nov 2020 17:20:31 +0330</pubDate>
            </item>
            </channel>
</rss>