Interceptor là gì

Interceptor là gì?Tóm tắt: Mặc dù Retrofit làm cho việc gửi các yêu cầu HTTP trở nên rất đơn giản, nhưng nó cũng cung cấp một cơ chế thuận tiện để quản lý và viết lại các yêu cầu. Điều này được thực hiện với sự trợ giúp của bộ đánh chặn OkHttp. Interceptor có nghĩa là “can thiệp vào một thứ gì đó để đến được đích của nó”, tương tự như nó có nghĩa là Interceptor can thiệp vào một yêu cầu, thay đổi yêu cầu đó và gửi nó trở lại đích (máy chủ). Ví dụ: khi bạn gửi từ ứng dụng của mình, bạn cần thêm mã thông báo Tự động hóa làm tiêu đề.
Thay vì tự động thêm Header giống nhau vào tất cả các điểm cuối như ở đây, bạn có thể chỉ cần thêm một bộ chặn sẽ được gọi mỗi khi một yêu cầu được gửi đi.
Xem Thêm:Loudness là gì
1. Tổng quan về OkHttp Interceptor
Định nghĩa chính thức về thiết bị đánh chặn là: Thiết bị đánh chặn được sử dụng để quan sát, điều chỉnh và có thể chặn các yêu cầu và phản hồi. Thông thường, các trình chặn thêm, xóa và chuyển đổi tiêu đề theo yêu cầu hoặc phản hồi được trả về (từ máy chủ).
2. Interceptor là gì?
Về cơ bản có 2 loại máy bay đánh chặn:
Xem Thêm:Working out là gì
Bộ đánh chặn ứng dụng: Đây là các bộ đánh chặn nâng cao được sử dụng để chặn các yêu cầu đến hoặc phản hồi phản hồi. Chúng thường được sử dụng để viết lại các tiêu đề / truy vấn trong các yêu cầu và phản hồi. Bộ đánh chặn chắc chắn sẽ được gọi một lần ngay cả khi phản hồi được tải từ bộ nhớ cache.
Bộ đánh chặn mạng: Đây là các bộ đánh chặn cấp thấp hơn được sử dụng để theo dõi các yêu cầu và phản hồi được truyền qua mạng. Rất hữu ích để theo dõi chuyển hướng, thử lại và tạo quyền truy cập để yêu cầu chi tiết. Chúng sẽ không được gọi nếu phản hồi đã được lưu trong bộ nhớ cache.
Để thấy rõ hơn sự khác biệt giữa Network Interceptor và Application Interceptor, chúng ta hãy quan sát mô hình sau:
3. Triển khai thiết bị đánh chặn:
Khởi tạo hoặc khai báo một bộ đánh chặn rất dễ dàng. Chúng ta cần triển khai giao diện Interceptor và ghi đè phương thức interceptor () như hình dưới đây. Cả hai loại đánh chặn, ứng dụng và mạng, đều được thực hiện bởi cùng một giao diện:
Lớp tĩnh riêng CustomInterceptor triển khai bộ chặn {
Tham Khảo:Navillera là gì
Ghi đè chặn Phản hồi công khai (Chuỗi chuỗi) ném IOException {/ * chain.request () trả về yêu cầu ban đầu mà bạn có thể sử dụng (sửa đổi, viết lại) * / Yêu cầu request = chain.request (); // tại đây bạn có thể viết lại yêu cầu / * chain.proceed (request) là lệnh gọi bắt đầu công việc HTTP. Cuộc gọi này gọi yêu cầu và trả về phản hồi dựa trên yêu cầu. * / Response response = chain.proceed (request); // Tại đây bạn có thể viết lại / sửa đổi phản hồi để trả về phản hồi;}} Gọi chain.proceed (request) là một phần quan trọng của mọi quá trình triển khai interceptor.
Phương pháp có vẻ đơn giản này là nơi tất cả các công việc HTTP xảy ra, đây là nơi một yêu cầu được thực hiện và phản hồi nhận được để đáp ứng yêu cầu đó.
4. Ghi nhật ký các yêu cầu và phản hồi
Là nhà phát triển, chúng tôi cần ghi lại lịch sử yêu cầu / phản hồi và trạng thái. Điều này rất quan trọng vì chúng ta cần biết điều gì đã xảy ra với yêu cầu / phản hồi được gửi. Các nhật ký này sẽ cho chúng tôi biết tiêu đề, nội dung yêu cầu / phản hồi và các chi tiết quan trọng để gỡ lỗi và sửa lỗi.
Và may mắn thay, không khó để trình chỉnh sửa hiển thị các nhật ký này bằng cách sử dụng Retrofit
*
Retrofit cung cấp cho chúng tôi một công cụ đánh chặn tùy chỉnh – HttpLoggingInterceptor có thể được đăng ký với ứng dụng khách OkHttp. Sử dụng đối tượng này, chúng tôi có thể in ra tất cả nhật ký hoạt động HTTP thông qua ứng dụng khách như sau:
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor (); interceptor.setLevel (HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder (). AddInterceptor (interceptor).buildilder (); “https://backend.example.com”).client (client).addConverterFactory (GsonConverterFactory.create ()). build (); Có các tham số trong HttpLoggingInterceptor.Level: Level.BASIC: log request / responseLevel.
BODY: Ghi nhật ký hàng, tiêu đề và nội dung tương ứng (nếu có) Cấp. NGƯỜI DÙNG: Đăng xuất hàng tiêu đề tương ứng Cấp.
5. Viết lại yêu cầu – thêm / bớt tiêu đề:
Tại thời điểm này, chúng tôi đã biết cách tạo một thiết bị đánh chặn tùy chỉnh. Trong phần này, chúng ta sẽ tìm hiểu cách sử dụng các bộ chặn tùy chỉnh để sửa đổi các tiêu đề được gửi cùng với các yêu cầu mạng.
Xem thêm: Nsfw có nghĩa là gì – dùng khi nào thì không an toàn
Trong ví dụ dưới đây, chúng ta cùng nhau đọc mã phản hồi và tạo một phản hồi mới dựa trên mã phản hồi:
Lớp tĩnh riêng RequestInterceptor triển khai bộ chặn {
Ghi đè đánh chặn phản hồi công khai (chuỗi) ném IOException {chain.request () trả về yêu cầu ban đầu mà bạn có thể sử dụng (sửa đổi, viết lại) * / request originalRequest = chain.request (); Headers headers = new Headers.Builder ().add (“Authorization”, “auth-value”).add (“User-Agent”, “you-app-name”).build (); Request newRequest = originalRequest.newBuilder ().addHeader (“Ủy quyền”, “auth- value “) // Thêm tiêu đề có tên và giá trị..addHeader (“User-Agent”, “you-app-name”).cacheControl (CacheControl.FORCE_CACHE) // Đặt điều khiển tiêu đề cho yêu cầu này, thay thế tất cả các tiêu đề hiện có..headers (tiêu đề) // Xóa tất cả các tiêu đề trên trình tạo này và thêm tiêu đề..method (originalRequest.method (), null) // thêm phương thức yêu cầu và yêu cầu body.removeHeader (“Ủy quyền”) // xóa tất cả các tiêu đề có cùng tên.build (); / * chain.proceed (yêu cầu) là một Một lời gọi để bắt đầu công việc HTTP. Cuộc gọi này sẽ thực hiện một yêu cầu và trả lại một phản hồi thích hợp. * / response response = chain.proceed (newRequest); trả về phản hồi;}
Khi bạn xác định giao diện bộ chặn như trên, bạn có thể triển khai cuộc hội thoại với ứng dụng khách OkHttp như được hiển thị bên dưới. Bây giờ bạn nên đăng ký với Retrofit.Buider để tất cả các yêu cầu sẽ sử dụng ứng dụng khách OkHttp và bộ chặn của bạn sẽ được gọi và hợp lệ.
OkHttpClient okHttpClient = new OkHttpClient.Builder ().addInterceptor (new CustomInterceptor ()) // Cái này được dùng để thêm ApplicationInterceptor..addNetworkInterceptor (new CustomInterceptor ()) // Cái này được dùng để thêm NetworkInterceptor..build (); // Sử dụng BuilderRetrofit Xác định thư viện mà Retrofit chuyển đổi từ phản hồi sang POJO.build ();
6. Sử dụng OkHttp Interceptor để viết lại phản hồi
Ngoài ra, các trình đánh chặn OkHttp có thể được sử dụng để viết lại / sửa đổi phản hồi được trả về từ máy chủ. Trong trường hợp này, bạn không thể viết lại các tiêu đề phản hồi, nhưng bạn có thể thay đổi nội dung phản hồi như được hiển thị bên dưới. Lớp tĩnh riêng ResponseInterceptor triển khai bộ chặn {
Ghi đè chặn Phản hồi công khai (Chuỗi chuỗi) ném IOException {// Chúng tôi sử dụng API chain.proceed () để nhận phản hồi. Thao tác này gọi yêu cầu và trả về responseResponse response = chain.proceed (chain.request ()); thử {JSONObject jsonObject = new JSONObject (); if (response.code () == 200) {jsonObject.put (“code”, 200); jsonObject.put (“status”, “OK”); jsonObject.put (“message”, new JSONObject (response.body (). String ()));} else {jsonObject.put (“code”, 404); jsonObject.put (“trạng thái”, “lỗi”); jsonObject.put (“thông báo”, JSONObject mới (response.body ().
String ())); kiểu phương tiện contentType = response.body (). contentType (); ResponseBody body = ResponseBody.create (contentType, jsonObject.toString ()); return response.newBuilder (). body (body).build ();} catch (JSONException e) {e.printStackTrace ();} return response;}}
Tóm tắt Vì vậy, trong bài viết này, tôi đã giới thiệu về Interceptor và một số cách sử dụng mà chúng ta thường gặp. Hi vọng bài viết có thể giúp ích được cho bạn và cho bạn hiểu được interceptor là gì?
“Ghé thăm trang web Tecco Skyville Tower của chúng tôi mỗi ngày để cập nhật tin tức nhé”