RETROFIT LÀ GÌ

  -  

Retrofit là một HTTPhường client type-safe đến Android cùng Java. Retrofit giúp thuận tiện kết nối đến một các dịch vụ REST bên trên website bằng phương pháp chyển thay đổi API thành Java Interface.

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

Retrofit vô cùng mạnh bạo khiến cho bạn dễ dàng xử lý tài liệu JSON hoặc XML tiếp nối đối chiếu cú pháp thành Plain Old Java Objects (POJOs). Tất cả các yêu cầu GET, POST, PUT, PATCH, với DELETE hồ hết có thể được triển khai.

Giống như hầu hết những ứng dụng mã nguồn mlàm việc khác, Retrofit được xây dừng dựa vào một số trong những thỏng viện mạnh khỏe cùng giải pháp không giống. Đằng sau nó, Retrofit tạo nên Việc sử dụng OkHttp (tự và một bên phân phát triển) nhằm cách xử trí những kinh nghiệm trên mạng. Hình như, Retrofit ko tích vừa lòng bất kỳ một bộ chuyển đổi JSON nào để so với tự JSON thành các đối tượng người dùng Java. Txuất xắc vào kia nó kèm theo với các thỏng viện thay đổi JSON sau đây nhằm cách xử trí điều đó

Cách cần sử dụng Retrofit

Để thao tác làm việc với Retrofit bạn cần tiến hành cơ bản 3 lớp:

Model class để ánh xạ với JSON data.Một interface dùng làm khái niệm các hàm cùng cách làm HTTPRetrofit.Builder Lớp để tư tưởng URL Endpoint cho các vận động liên quan cho tới HTTP

APIDeclaration

Annotations vào interface cùng các ttê mê số của bọn chúng chỉ ra bí quyết mà request được thực hiện

Request Method

Mỗi method phải bao gồm một HTTPhường annotation. Có 5 annotations GET, POST, PUT, DELETE, and HEADBên trong mỗi annotation là một trong những đoạn của URL.


GET("users/list")Quý khách hàng cũng hoàn toàn có thể hướng dẫn và chỉ định tđắm say số truy vấn trong URL


GET("users/list?sort=desc")

URL MANIPULATION

Dưới đó là ví dụ của interface dùng để khái niệm những http request

public interface GitHubService
GET("users/user/repos") CallListRepo>> listRepos(
Path("user") String user);Kăn năn {user> trong đoạn trên được thay thế sửa chữa bươi ttê mê số user trong hàm listRepos. Bằng câu hỏi sử dụng anotation
Path
cùng truyền vào thuộc chuỗi string trong kăn năn

Tđắm đuối số query cũng có thể add thêm được nlỗi sau:


GET("group/id/users")CallListUser>> groupList(
Path("id") int groupId,
Query("sort") String sort);Nếu nhưng tmê say số query phức hợp rất có thể sự dụng Map:


GET("group/id/users")CallListUser>> groupList(
Path("id") int groupId,
QueryMap MapString, String> options);

Request Body

Một đối tượng người dùng rất có thể được hướng đẫn đến mục đích thực hiện có tác dụng phần body mang đến tróc nã vấn cùng với
Body annotation


POST("users/new")CallUser> createUser(
Body User user);Đối tượng cũng biến thành được đổi khác bằng cách áp dụng trình chuyển đổi được hướng dẫn và chỉ định vào Retrofit instance. Nếu không có trình chuyển đổi như thế nào được tiếp tế, chỉ hoàn toàn có thể áp dụng RequestBody.

Form Encoded and multipart

Các cách thức cũng hoàn toàn có thể được knhì báo nhằm gửi dữ liệu được mã hóa theo chủng loại và phần lớn.Dữ liệu được mã hóa biểu mẫu mã được gửi lúc tất cả annotation
FormUrlEncoding . Mỗi cặp key-value được ghi chú bởi
Field cất tên với đối tượng người tiêu dùng hỗ trợ quý giá.


FormUrlEncoded
POST("user/edit")CallUser> updateUser(
Field("first_name") String first,
Field("last_name") String last);Yêu cầu đa số được sử dụng với
Multipart .Mỗi phần được knhị báo bằng phương pháp thực hiện chú giải
Part.


Multipart
PUT("user/photo")CallUser> updateUser(
Part("photo") RequestBody pholớn,
Part("description") RequestBody description);

Header manipulation

Quý Khách hoàn toàn có thể Header tĩnh mang đến phương thức sử dụng
Headers annotation.

Xem thêm: Mô Hình Màu Rgb Là Gì - Tìm Hiểu Về Hệ Màu Rgb


Headers("Cache-Control: max-age=640000")
GET("widget/list")CallListWidget>> widgetList();
Headers( "Accept: application/vnd.github.v3.full+json", "User-Agent: Retrofit-Sample-App")
GET("users/username")CallUser> getUser(
Path("username") String username);Lưu ý rằng những headers không ghi đè lên trên nhau. Tất cả những title gồm cùng thương hiệu sẽ được bao gồm trong những hiểu biết. Một tiêu đề hưởng thụ hoàn toàn có thể được cập nhật động bằng cách áp dụng chú giải
Header. Một tđam mê số tương ứng yêu cầu được hỗ trợ cho
Header. Nếu quý hiếm là null, header sẽ ảnh hưởng bỏ lỡ. Nếu không, toString sẽ tiến hành điện thoại tư vấn trên cực hiếm cùng công dụng được thực hiện.


GET("user")CallUser> getUser(
Header("Authorization") String authorization)Tương từ như những tham mê số truy nã vấn, đối với hearder phức tạp, có thể sự dụng Map


GET("user")CallUser> getUser(
HeaderMap MapString, String> headers)Header đề nghị sản xuất từng request tuy vậy rất có thể áp dụng OkHttp Interceptor nhằm rứa thế

Converters

Theo mặc định, Retrofit chỉ rất có thể giải tuần trường đoản cú hóa (deserialize) các HTTPbodies thành ResponseBody của OkHttp với nó chỉ rất có thể gật đầu đồng ý một số loại RequestBody của nó đến
Body.Bộ biến đổi hoàn toàn có thể được sản xuất nhằm hỗ trợ các loại khác.Dưới đây là 6 thỏng viện thịnh hành sử dụng.

Gson: com.squareup.retrofit:converter-gsonJackson: com.squareup.retrofit:converter-jacksonMoshi: com.squareup.retrofit:converter-moshiProtobuf: com.squareup.retrofit2:converter-protobufWire: com.squareup.retrofit2:converter-wireVà đối với XML, Retrofit hỗ trợ:Simple Framework: com.squareup.retrofit2:converter-simpleframeworkCaching là gì?

Caching là biện pháp tàng trữ tạm thời dữ liệu được kiếm tìm hấp thụ tự mạng bên trên bộ lưu trữ của đồ vật, nhằm bạn cũng có thể truy vấn vào lần sau khoản thời gian đồ vật ngoại tuyến đường hoặc trường hợp bọn họ ước ao truy cập lại và một dữ liệu.

Nhưng trước kia, tại sao đề xuất sử dụng caching trong áp dụng của mình?

*

Lợi ích của bài toán CachingGiảm tiêu thụ đường truyền.Tiết kiệm cho bạn thời gian chúng ta dành riêng thời gian chờ đợi sever hỗ trợ cho mình ý kiến mạng.Tiết kiệm đến sever trọng trách của lưu lượng bổ sung.Nếu bạn cần truy cập lại cùng một tài nguyên mạng sau khi đang truy vấn cách đây không lâu, thứ của doanh nghiệp đang giành được Yêu cầu nên gửi thử khám phá mang đến đồ vật chủ; Tgiỏi vào đó, nó đang nhận ra bình luận lưu trữ.Vì vậy, đưa quý phái phần thực hành thực tế nào Tạo instance Retrofit

Khi áp dụng Retrofit, cùng vs GSON, thì Retrofit instance sẽ có được dạng nỗ lực này:

public static Retrofit getInstance(Context context) if (sRetrofit == null) sRetrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); return sRetrofit; Với instance làm việc trên Tức là ta vẫn dùng OkHttpClient khoác định nhằm triển khai requests. Điều kia không được "thân thiện" với bộ nhớ lưu trữ cho lắm .Chúng ta sẽ khởi tạo ra instance của OkHttpClient để cabít dữ liệu & cập nhật dữ bài toán rước tài liệu một cách dễ dàng khi:

Thiết bị sẽ offline.Thiết bị buộc phải truy vấn cùng một dữ liệu tự internet vào một khoảng thời gian ngắn.Tạo OkHttpClient

Tạo cách làm đánh giá kết nối internet

Trước hết yêu cầu tạo một cách tiến hành nhằm đánh giá liên kết internet trên thiết bị:

public static boolean isNetworkAvailable(Context context) ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected();

Định nghĩa một số tđắm say số tất cả sử dụng

Dưới đấy là một số tsay đắm số tất cả thực hiện vào quy trình chế tạo OkHttpClient.Ta đa phần quyên tâm cho CACHE_SIZE, TIME_CACHE_ONLINE, TIME_CACHE_OFFLINE:

CACHE_SIZE: chỉ ra rằng lượng cabít sẽ lưu giữ là 10MB. Chụ ý rằng CACHE_SIZE đề xuất là phong cách long.TIME_CACHE_ONLINE: ví như tất cả internet đang đem cabịt lưu giữ 1 phút trước, ví như thừa 1 phút sẽ không đem, "max-age" là nằm trong tính phú trách việc này.

Xem thêm: Đâu Là Đồng Tiền Nào Cao Nhất Thế Giới 2021, 10 Đồng Ngoại Tệ Đắt Giá Nhất Thế Giới

TIME_CACHE_OFFLINE: giả dụ không có mạng internet đang lấy cađậy lưu giữ 1 ngày trước đây, ví như thừa thì ko mang, "max-stale" là ở trong tính prúc trách bài toán này, "only-if-cached" là nhằm không request mà chỉ lấy cabịt.

private static final long CACHE_SIZE = 10 * 1024 * 1024; private static final int READ_TIMEOUT = 5000; private static final int WRITE_TIMEOUT = 5000; private static final int CONNECT_TIMEOUT = 5000; private static String CACHE_CONTROL = "Cache-Control"; private static final String TIME_CACHE_ONLINE = "public, max-age = 60";// 1 minute private static final String TIME_CACHE_OFFLINE = "public, only-if-cached, max-stale = 86400";//1 dayNếu các bạn muốn xem thêm về max-age, max-stale cùng only-if-cached thì nhấp chuột đây

Tạo OkHttpClient

Tạo instance của OkHttpClient với các thông số vẫn knhị báo mặt trên

private static OkHttpClient initClient(final Context context) OkHttpClient.Builder builder = new OkHttpClient.Builder() .readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS) .writeTimeout(WRITE_TIMEOUT, TimeUnit.MILLISECONDS) .connectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS) .retryOnConnectionFailure(true) .cache(new Cache(context.getCacheDir(), CACHE_SIZE)) .addInterceptor(chain -> Request request = chain.request(); if (isNetworkAvailable(context)) request = request .newBuilder() .header(CACHE_CONTROL, TIME_CACHE_ONLINE) .build(); else request = request .newBuilder() .header(CACHE_CONTROL, TIME_CACHE_OFFLINE) .build(); HttpUrl httpUrl = request.url() .newBuilder() .addQueryParameter(QUERRY_PARAMETER_API_KEY, API_KEY) .build(); Request.Builder requestBuilder = request .newBuilder() .url(httpUrl); return chain.proceed(requestBuilder.build()); ); return builder.build();

Thêm instance OkHttpClient vừa chế tạo ra vào Retrofit

Thêm 1 cái vào thủ tục getInstance của Retrofit để thêm OkHttpClient

public static Retrofit getInstance(Context context) if (sRetrofit == null) sRetrofit = new Retrofit.Builder() .baseUrl(BASE_URL) //Add OkHttpClient .client(initClient(context)) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); return sRetrofit; Tổng kếtTóm chiếc váy đầm lại nội dung bài viết tôi đã trình bày mang đến các bạn thấy được Retrofit là gì cùng các sử dụng ra làm sao. Bên cạnh đó là vấn đề caching vs Retrofit ra sao.Nếu API mà lại nhiều người đang thực hiện cho ứng dụng của chính mình có số lượng giới hạn về con số request chúng ta cũng có thể tiến hành, thì không chỉ có lưu lại vào bộ đệm cùng với Retrofit một chiến lược bổ ích nhằm áp dụng mà lại còn là lắp thêm quan trọng để các bạn thao tác cùng với API . Vì vậy, bản thân hi vọng nội dung bài viết có thể giúp cho bạn tận dụng lợi thế của bộ nhớ đệm với Retrofit cùng làm cho vận dụng của chúng ta awesome hơn

Tư liệu sử dụng:

https://medium.com/mindorks/caching-with-retrofit-store-responses-offline-71439ed32fda