این قسمت سوم از سری از مقالات " آموزش کاربردی شبکه در اندروید " است، که قصد داریم در مورد احراز هویت و Interceptorها در Okhttp و چرایی اهمیت آنها برای کدگذاری API بحث خواهیم کرد.
- بخش اول – Http و لایه شبکه
- بخش دوم – TLS, Certificates, Pinning
- بخش سوم – احراز هویت و رهگیرها(interceptors)
- بخش چهارم – عملکرد، افزونگی و همزمانی
- بخش پنجم – تست و ادغام
Interceptor
Interceptorها همه چیز برای مهندسین تلفن همراه است، یک interceptor خوب میتواند در وقت شما، در debug کردن و حتی نوشتن کدها صرفه جویی کند، این به ما کمک میکند تا نوعی مانیتور برای بازنویسی و تلاش مجدد برای فراخوانی APIها داشته باشیم، در داخل okhttp میتوانید چندین interceptor داشته باشیم، این بستگی به کاری که میخواهید انجام دهید دارد، interceptorها مخصوص شندین آنچه در برنامه شما است و مواقعی است که درخواست پس از ترک برنامه شما تغییر میکند.
Logging Interceptor
این اسم به ما میگوید که هر آنچه که انجام میدهند، اطلاعات را برای ما لاگ میکنند و به ما اطلاعات مربوط به header یا body درخواست/پاسخ را به ما میدهند، به همین دلیل ما باید واقعا مراقب باشیم که این را در نسخه release برداریم، حتی قرار دادن آن در buildConfig.DEBUG اگر دقت کافی را نداشته باشیم میتواند خطرناک باشد.
توجه داشته باشید که میتوانیم توکنها و کلیدهای هدر را فاش کنیم، این دادهها باید محافظت شوند و فقط به صورت کنترل شده لاگ شوند، میتوانید interceptor را همانند زیر اضافه کنید:
شما یک HttpLoggingInterceptor ایجاد خواهید کرد که در آن میتوانید نوع سطوحی که میخواهید به آن دسترسی داشته باشید را انتخاب کنید، برای سهولت کار، میتوانید کتابخانه زیر را برای داشتن لاگهای از پیش تعریف شده اضافه کنید.
implementation("com.squareup.okhttp3:logging-interceptor:4.X.X"
اگر میخواهید روشی خاص برای ارسال لاگهای خود داشته باشید باید NetworkInterceptor خود را ایجاد کنید، آنچه در اینجا ایجاد شده است Interceptor Callback را بازنویسی کرده است.
override fun intercept(chain: Interceptor.Chain): Response {
// Code on HttpLoggingInterceptor
}
میتوانید یک Interceptor برای بروزرسانی درخواستی که میخواهید ارسال کنید داشته باشید، مثلا برای افزودن header.
Network Interceptor
این به عنوان Network Interceptor شناخته میشود زیرا درخواستها را بروز میکنند، به عنوان مثال retrofit گزینهای برای بروزرسانی header یک درخواست را بدون به خطر انداختن یکپارچگی Network Interceptor دارد.
علاوه بر این، این اطلاعات به طور واقعی در فرایند درخواست تغییر نمیکند، یک درخواست جایگاهی به اسم Chain دارد که وقتی تمام پروسه کامل شد فراخوانی میشود و شما میتوانید این متد را در interceptor بازنویسی کنید.
NetworkInterceptorها به گونهای طراحی شدهاند که پاسخهای cache شده را فراخوانی نکنند و دادههای بین انتقال را مشاهده کنند و همچنین به کانکشن درخواست دسترسی دارند.
احراز هویت
احراز هویت بخشی از Network Interceptor است که میتواند در وسط پاسخها تغییر مسیر/تلاش مجدد را انجام دهد، تصور کنید که میخواهید قبل از success یا error کوروتین، پاسخ را دریافت کنید، برای مثال ما میتوانیم زمانی که خطای 401 گرفتیم، پاسخ را دریافت کنیم، سپس توکن را برای درخواست ناموفق بروز کنیم و Authenticator مسئولیت ارسال مجدد درخواست را بر عهده میگیرد، نیازی به ارسال چیز دیگری یا ایجاد منطق در لایه نمایش یا داده نیست، فقط یک Network Interceptor برای بروزرسانی توکن تقریباً تمام چیزی است که برای رسیدگی به خطای 401 نیاز داریم.
این همه مباحث مربوط به این قسمت بود، در قسمت بعدی در مورد عملکرد، افزونگی و همزمانی بحث خواهیم کرد.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید