Interceptor Là Gì

     
bulongvietlong.com chia sẻ mọi vật dụng về trò chơi / phần mềm / Thủ Thuật giành riêng cho máy tính với những tin hay độc nhất vô nhị và phần đa thông tin kỹ năng và kiến thức hỏi đáp.

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

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

Đang xem: Interceptor là gì


Table of Contents


1.Tổng quan tiền về OkHttp Interceptor

Một định nghĩa bằng lòng cho hầu hết Interceptor là : các Interceptor là nhằm quan sát, điều chỉnh và có khả năng chặn các request và đông đảo phản hồi. Thường thì các Interceptor tiến hành thêm, xóa , thay đổ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 phiên bản được chia thành 2 nhiều loại :

Application Interceptor: Đây là là hầu như interceptor có cấp độ cao được sử dụng để chặn các các request lên hoặc response ý kiến về. Chúng thường được sử dụng để viết lại các header/query ngơi nghỉ cả request với response. Mọi interceptor chắc hẳn rằng được call một lần ngay cả khi bình luận được hấp thụ từ bộ lưu trữ (cache).Network Interceptor : Đây là hồ hết interceptor có cấp độ thấp hơn được sử dụng để theo dõi những request với response được truyền quan tiền mạng. Nó thì rất hữu ích để theo dõi việc redirect, retry và tạo thành truy cập cho những cụ thể của request. Chúng không được gọi nếu response đã làm được lưu trữ.

Xem thêm: “ Begging Là Gì ? What Is The Meaning Of I'M Begging You

Để thấy rõ hơn sự khác biệt giữa Network Interceptor với Application Interceptor, bọn họ cùng quan gần cạnh mô hình sau đây nhé :

*

3.Implement Interceptor:

Việc khởi tạo ra hoặc khai báo một Interceptor thì khá dễ dàng. Chúng ta chủ cần được implement interface Interceptor cùng override lại method interceptor() như được thực hiện dưới đây. Cả 2 loại Interceptor là Application vs Network Interceptor thì được implement vì chưng 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 điện thoại tư vấn which will initiate the HTTP work. This call invokes the request và 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 gọi đến chain.proceed(request) là 1 phần quan trọng của mỗi implement của interceptor. Loại method trông có vẻ như đơn gian này là nơi toàn bộ các công việc của HTTP xảy ra, đây là nơi request được khởi sản xuất và một response sẽ được nạp về để đáp ứng request đó.

Một khi bạn đã có mang interface interceptor như trên, bạn đã sở hữu thể tiến hành nói cùng với OkHttp Client như ở bên dưới đây. Và bây chừ bạn nên đk với Retrofit.Buider, bằng cách này cho tất cả các request OkHttp Client sẽ dược áp dụng và Interceptor của các 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 add ApplicationInterceptor..addNetworkInterceptor(new CustomInterceptor()) //This is used to địa chỉ cửa hàng NetworkInterceptor..build();//Defining the Retrofit using BuilderRetrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL) // cần phải thêm base_url.client(okHttpClient) //The Htttp client to lớn be used for requests.addConverterFactory(GsonConverterFactory.create()) // Thư viện để convert từ bỏ resonse sang POJO.build();

4. Ghi lại các log của Request với Response

Như là gần như developers thì họ cần log ra các lịch sử và tình trạng của các request/response. Điều này rất quan trọng đặc biệt vì bọn họ cần biết phần nhiều gì đang xảy ra với số đông request/response được gởi đi. Phần nhiều logs này sẽ cho bọn họ biết về headers, request/response toàn thân và chi tiết quan trọng cho vấn đề debug và sửa những lỗi. Cùng rất như ý là không khó để editor rất có thể hiển thị ra rất nhiều log này với Retrofit

*

Retrofit cung ứng cho họ với một Custom Interceptor – HttpLoggingInterceptor có thể đăng register cùng với OkHttp Client. Với object này chúng ta có thể in ra toàn bộ các log mang lại các hoạt động của HTTP thông 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ó những param :Level.BASIC : log ra phần nhiều dòng request/responseLevel.BODY: log ra những dòng, với header và body tươn ứng (nếu có)Level.HEADERS: logs ra phần đa dòng vào header tương ứ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 cụ nào để tạo nên một Custom Interceptor. Trong phần này chúng ta sẽ tò mò cách thực hiện Custom Interceptor để modify headers gửi với một network request nhé.

Xem thêm: E-Commerce Là Gì - Thương Mại Điện Tử

Trong ví dụ dưới đây, họ cùng phát âm một response code cùng 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 với name cùng value. .addHeader(“User-Agent”, “you-app-name”) .cacheControl(CacheControl.FORCE_CACHE) // Đặt kiểm soát điều hành header là của request này, replace lên những header vẫn có. .headers(headers) //Removes all headers on this builder and adds headers. .method(originalRequest.method(), null) // Adds request method and request toàn thân .removeHeader(“Authorization”) // Removes all the headers with this name .build(); /* chain.proceed(request) là 1 lời gọi sẽ tạo HTTP work. Lời hotline này sẽ tiến hành request với 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 rất có thể được thực hiện để rewite/ modify các response trả về từ server. Với trường hòa hợp này chúng ta không thể rewrite header của response nhưng chúng ta có thể thay đổi body toàn thân của response như đoạn code bên 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 nội dung bài viết này mình đã giới thiệu về Interceptor và vài cách áp dụng mà bọn họ thường hay 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