[HICC.VN]

GIỚI THIỆU :trong lúc Retrofit thực hiện gửi những HTTP request một cách khá tốt nhất, nó cũng cho phép một cơ chế kỹ thuận nhằm quản lý và rewrite những requests. Điều này được thực hiện với sự trợ trợ giúp đỡ của OkHttp Interceptor. Interceptor có nghĩa là “làm can thiệp một chiếc gì đó trong việc đến được đích đến của nó”, tương tự như nghĩa của nó Interceptor can thiệp vào một request, thay đổi request đó và sau đó gửi lại đến điêm đến của nó (server).Ví dụ như là lúc chúng ta gửi những request từ ứng dụng của chúng ta mà cần thêm Autorization token như là Header. Thay vì tự động thêm cùng Header vào tất cả những điểm cuối như ở đây, chúng ta hoàn toàn có thể chỉ cần thêm một Interceptor sẽ được gọi mỗi lần chúng ta gửi một request.

chúng ta đang xem: Interceptor là gì

1.Tổng quan về OkHttp Interceptor

Một định nghĩa chính thức cho những Interceptor là : những Interceptor là nhằm quan sát, điều chỉnh và có khả năng chặn những request và những phản hồi. Thông thường những Interceptor thực hiện thêm, xóa , chuyển đổi những Headers trên request hoặc trên những phản hồi được trả về (từ server).

2. những kiểu Interceptor :

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

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

Xem thêm: Rsi Là Gì – Phân Tích kỹ thuật viên

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

*

3.Implement Interceptor:

Việc khởi tạo hoặc khai báo một Interceptor thì khá tốt nhất và thuận tiện. Chúng ta chủ cần phải implement interface Interceptor và override lại method interceptor() như được vận hành dưới đây. Cả 2 loại Interceptor là Application vs Network Interceptor thì được implement bởi 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 call which will initiate the HTTP work. This call invokes the request and 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à một phần quan trọng của mỗi implement của interceptor. chiếc method trông hình như đơn gian này là vị trí tất cả những công việc của HTTP xảy ra, đây là vị trí request được khởi tạo và một response sẽ được nạp về nhằm đáp ứng request đó.

Một lúc chúng ta đã định nghĩa interface interceptor như trên, chúng ta đã hoàn toàn có thể vận hành nói với OkHttp Client như ở dưới đây. Và ngày nay chúng ta nên đăng ký với Retrofit.Buider, bằng phương pháp này cho tất cả những request OkHttp Client sẽ dược sử dụng và Interceptor của chúng ta sẽ được gọi đến và có 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 add 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 be used for requests.addConverterFactory(GsonConverterFactory.create()) // Thư viện nhằm convert từ resonse sang POJO.build();

4. Ghi lại những log của Request và Response

Như là những developers thì chúng ta cần log ra những lịch sử và tình trạng của những request/response. Điều này rất quan trọng vì chúng ta cần biết những gì đang xảy ra với những request/response được gửi đi. Những logs này sẽ cho chúng ta biết về headers, request/response body và cụ thể quan trọng cho việc debug và sửa chữa những lỗi. Và rất may mắn là không khó nhằm editor hoàn toàn có thể hiển thị ra những log này với Retrofit

*

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

Xem thêm: Nsfw Có Nghĩa Là Gì – Not Safe For Work được người sử dụng lúc Nào

Trong ví dụ dưới đây, chúng ta cùng đọc một response code và build một new response mới dựa trên 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 và 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 mọi header sẽ có. .headers(headers) //Removes all headers on this builder and adds headers. .method(originalRequest.method(), null) // Adds request method and request body .removeHeader(“Authorization”) // Removes all the headers with this name .build(); /* chain.proceed(request) là một lời gọi sẽ khởi tạo HTTP work. Lời gọi này sẽ thực hiện request và rả về response tương ứng. */ Response response = chain.proceed(newRequest); return response;

6. Rewriting Response với OkHttp Interceptor

Tương tự, OkHttp Interceptor hoàn toàn có thể được sử dụng nhằm rewite/ modify những response trả về từ server. Với trường hợp này chúng ta không thể rewrite header của response nhưng chúng ta hoàn toàn có thể thay đổi body 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 and 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 sử dụng mà chúng ta thường nhiều lần gặp. Hi vọng nội dung bài viết hoàn toàn có thể trợ giúp đỡ ích cho chúng ta.

Have a nice day!

tìm hiểu thêm :

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

luôn mục: Hỏi Đáp

Nguồn : Tổng hợp

[bvlq_danh_muc]

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

This site uses cookies to offer you a better browsing experience. By browsing this website, you agree to our use of cookies.