Interceptor là gì

  -  
hoidapthutuchaiquan.vn share mọi sản phẩm về trò chơi / phần mềm / Thủ Thuật giành cho máy tính với phần đông tin hay tốt nhất và phần nhiều thông tin kỹ năng và kiến thức hỏi đáp.

GIỚI THIỆU :Trong lúc Retrofit tiến hành gửi số đông HTTP request một biện pháp khá đối chọi giản, nó cũng cho phép một nguyên tắc kỹ thuận để làm chủ và rewrite hầu hết requests. Điều này được thực hiện với sự trợ giúp của OkHttp Interceptor. Interceptor tức là “làm can thiệp một cái gì đấy trong câu hỏi đến được đích mang đến của nó”, tương tự như như nghĩa của nó Interceptor can thiệp vào một trong những request, biến hóa request đó và tiếp đến gửi lại đến điêm mang đến của nó (server).Ví dụ như là khi bạn gửi gần như request từ ứng dụng của người tiêu dùng mà phải thêm Autorization token như là Header. Thế vì auto thêm cùng Header vào tất cả các điểm cuối như làm việc đây, bạn cũng có thể chỉ đề xuất thêm một Interceptor sẽ tiến hành gọi những lần bạn gởi một request.

Bạn đang xem: Interceptor là gì

Đang xem: Interceptor là gì

1.Tổng quan về OkHttp Interceptor

Một định nghĩa chấp nhận cho đông đảo Interceptor là : những Interceptor là nhằm quan sát, điều chỉnh và có tác dụng chặn các request và đa số phản hồi. Thường thì các Interceptor tiến hành thêm, xóa , chuyển đổi các Headers trên request hoặc trên các phản hồi được trả về (từ server).

2. Những kiểu Interceptor :

Interceptor về căn bản được chia làm 2 nhiều loại :

Application Interceptor: Đây là là số đông interceptor có lever cao được thực hiện để chặn các các request lên hoặc response bình luận về. Chúng thường được thực hiện để viết lại những header/query ở cả request cùng response. Hầu như interceptor chắc chắn là được hotline một lần trong cả khi đánh giá được hấp thụ từ bộ nhớ lưu trữ (cache).Network Interceptor : Đây là rất nhiều interceptor có cấp độ thấp hơn được sử dụng để theo dõi những request và response được truyền quan tiền mạng. Nó thì rất bổ ích để theo dõi việc redirect, retry và tạo thành truy cập mang đến những chi tiết của request. Chúng không được gọi nếu response đã làm được lưu trữ.

Xem thêm: Bệnh Ataxia Là Gì ? Mất Điều Hòa Vận Động (Ataxia) Và Hướng Điều Trị

Để thấy rõ hơn sự không giống nhau giữa Network Interceptor với Application Interceptor, chúng ta cùng quan sát mô hình sau đây nhé :

*

3.Implement Interceptor:

Việc khởi chế tác hoặc khai báo một Interceptor thì khá dễ dàng. Họ chủ cần được implement interface Interceptor với override lại method interceptor() như được xúc tiến dưới đây. Cả 2 loại Interceptor là Application vs Network Interceptor thì được implement vì cùng một interface :

private static class CustomInterceptor implements Interceptor Override public Response intercept(Chain chain) throws IOException /* chain.request() returns original request that you can work with(modify, rewrite) */ Request request = chain.request(); // Here you can rewrite the request /* chain.proceed(request) is the gọi which will initiate the HTTP work. This call invokes the request & returns the response as per the request. */ Response response = chain.proceed(request); //Here you can rewrite/modify the response return response; Một cuộc hotline đến chain.proceed(request) là một phần quan trọng của từng implement của interceptor. Loại method trông có vẻ đơn gian này là nơi toàn bộ các các bước của HTTP xảy ra, đấy là nơi request được khởi tạo và một response sẽ tiến hành nạp về để đáp ứng request đó.

Một khi bạn đã khái niệm interface interceptor như trên, bạn đã sở hữu thể triển khai nói cùng với OkHttp Client như ở dưới đây. Và hiện thời bạn nên đăng ký với Retrofit.Buider, bằng phương pháp này cho toàn bộ các request OkHttp Client sẽ dược áp dụng và Interceptor của bạn sẽ được gọi đến và gồm hiệu lực.

OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(new CustomInterceptor()) // This is used to địa chỉ cửa hàng ApplicationInterceptor..addNetworkInterceptor(new CustomInterceptor()) //This is used to địa chỉ NetworkInterceptor..build();//Defining the Retrofit using BuilderRetrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL) // bắt buộc phải thêm base_url.client(okHttpClient) //The Htttp client khổng lồ be used for requests.addConverterFactory(GsonConverterFactory.create()) // Thư viện để convert từ bỏ resonse quý phái POJO.build();

4. đánh dấu các log của Request và Response

Như là phần đa developers thì bọn họ cần log ra các lịch sử dân tộc và tình trạng của những request/response. Điều này rất đặc trưng vì họ cần biết hầu hết gì đang xẩy ra với số đông request/response được gửi đi. Gần như logs này vẫn cho họ biết về headers, request/response body và chi tiết quan trọng cho việc debug với sửa những lỗi. Và rất suôn sẻ là không khó để editor rất có thể hiển thị ra gần như log này cùng với Retrofit

*

Retrofit cung ứng cho chúng ta với một Custom Interceptor – HttpLoggingInterceptor rất có thể đăng register với OkHttp Client. Cùng với object này bạn cũng có thể in ra toàn bộ các log mang lại các buổi giao lưu của HTTP trải qua client như sau :

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();Retrofit retrofit = new Retrofit.Builder().baseUrl(“https://backend.example.com”).client(client).addConverterFactory(GsonConverterFactory.create()).build();Trong HttpLoggingInterceptor.Level có các param :Level.BASIC : log ra đầy đủ dòng request/responseLevel.BODY: log ra mọi dòng, và header và body toàn thân tươn ứng (nếu có)Level.HEADERS: logs ra số đông dòng vào header khớp ứng với nóLevel.NONE : không log ra gì cả

5.Rewriting Request – Adding/ Removing Header :

Đến đây chúng ta đẽ biết làm gắng nào để tạo thành một Custom Interceptor. Trong phần này chúng ta sẽ khám phá cách thực hiện Custom Interceptor để modify headers nhờ cất hộ với một network request nhé.

Xem thêm: Lạm Phát Là Gì? Nguyên Nhân Lạm Phát Ở Việt Nam Và Giải Pháp Kiểm Soát

Trong ví dụ dưới đây, chúng ta cùng gọi một response code với build một new response mới dựa vào reponse code:

private static class RequestInterceptor implements Interceptor { Override public Response intercept(Chain chain) throws IOException chain.request() returns original request that you can work with(modify, rewrite) */ 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(“Authorization”, “auth-value”) //thêm một header cùng với name với value. .addHeader(“User-Agent”, “you-app-name”) .cacheControl(CacheControl.FORCE_CACHE) // Đặt kiểm soát header là của request này, replace lên hầu như header đã có. .headers(headers) //Removes all headers on this builder & adds headers. .method(originalRequest.method(), null) // Adds request method & request toàn thân .removeHeader(“Authorization”) // Removes all the headers with this name .build(); /* chain.proceed(request) là một trong lời gọi sẽ khởi tạo HTTP work. Lời hotline này sẽ tiến hành request cùng rả về response tương ứng. */ Response response = chain.proceed(newRequest); return response;

6. Rewriting Response cùng với OkHttp Interceptor

Tương tự, OkHttp Interceptor hoàn toàn có thể được áp dụng để rewite/ modify những response trả về từ bỏ server. Cùng với trường đúng theo này các bạn không thể rewrite header của response nhưng bạn có thể thay đổi toàn thân của response như đoạn code dưới đây.private static class ResponseInterceptor implements Interceptor Overridepublic Response intercept(Chain chain) throws IOException // We obtain the response using chain.proceed() API. This invokes the request & return the responseResponse response = chain.proceed(chain.request());try 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(“status”, “ERROR”); jsonObject.put(“message”, new JSONObject(response.body().string())); MediaType 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ỔNG KẾT .Như vậy, trong bài viết này mình đã reviews về Interceptor với vài cách sử dụng mà chúng ta thường tuyệt gặp. Hi vọng bài viết có thể góp ích mang đến bạn.

Have a nice day!

Tham khảo :

https://square.github.io/okhttp/3.x/logging-interceptor/okhttp3/logging/HttpLoggingInterceptor.Level.html

https://androidclarified.com/okhttp-interceptor-retrofit2-example/?fbclid=IwAR0xkUxt6frm6R9UsfDJR-pkND02FtM4zVa0u0fmD1o9ANeQ0Deg-0Ka6L0