Retrofit trong Android là gì? Tìm hiểu chi tiết về Retrofit

Retrofit là thuật ngữ được thường xuyên nhắc đến trong cộng đồng các Android Developer bởi những ưu điểm mà nó mang lại. Tuy nhiên, đối với những ai không thuộc chuyên ngành này sẽ cảm thấy khái niệm này xa lạ. Vậy là Retrofit trong Android là gì? Các bạn hãy cùng Tino Group tìm hiểu chi tiết hơn qua bài viết dưới đây nhé!

Retrofit là gì?

Định nghĩa Retrofit

Retrofit được định nghĩa là một type-safe HTTP client cho Java, Android và Kotlin do công ty Square tăng trưởng. Retrofit tương hỗ cho những nhà lập trình quy đổi API thành Java Interface để thuận tiện liên kết đến một dịch vụ REST trên web .Retrofit là một trong những thư viện Rest-Client được sử dụng thông dụng lúc bấy giờ trong việc tương hỗ tiếp xúc giữa client và server trở lên thuận tiện hơn. Thư viện này rất can đảm và mạnh mẽ được cho phép bạn thuận tiện giải quyết và xử lý tài liệu JSON hoặc XML và sau đó sẽ nghiên cứu và phân tích cú pháp thành Plain Old Java Objects ( POJOs ). Tại đây, hầu hết những nhu yếu như GET, POST, PUT, PATCH, và DELETE đều hoàn toàn có thể được thực thi .Retrofit-trong-android

Tương tự như các phần mềm mã nguồn mở khác, Retrofit được xây dựng dựa trên các thư viện và công cụ mạnh mẽ. Retrofit làm cho việc sử dụng OkHttp trở nên đơn giản để xử lý các yêu cầu trên mạng. Bên cạnh đó, kể từ Retrofit2 sẽ không tích hợp với bất kỳ một bộ chuyển đổi JSON nào để phân tích JSON thành các đối tượng Java. Để xử lý điều đó, Retrofit sẽ đi kèm với các thư viện chuyển đổi JSON sau đây:

  • Gson: com.squareup.retrofit:converter-gson
  • Jackson: com.squareup.retrofit:converter-jackson
  • Moshi: com.squareup.retrofit:converter-moshi

REST API là gì?

REST là viết tắt của cụm từ Representational State Transfer, được ra đời vào năm 2000 trong bài luận văn tiến sĩ của Roy Thomas Fielding (người đồng sáng lập giao thức HTTP). Đây là một dạng chuyển đổi cấu trúc dữ liệu và là một phong cách kiến ​​trúc cho việc thiết kế các ứng dụng có kết nối. REST sẽ sử dụng HTTP đơn giản để tạo ra giao tiếp giữa các máy. Vì vậy, thay vì sử dụng một URL cho việc xử lý các thông tin người dùng, REST sẽ tiến hành gửi một yêu cầu HTTP như GET, POST, DELETE,…đến một URL và xử lý dữ liệu tại đó.

API là viết tắt của cụm từ Application Programming Interface, là một giao diện lập trình ứng dụng giúp tạo ra các phương thức kết nối đến các thư viện và những ứng dụng khác nhau.

Tóm lại, REST API là một ứng dụng quy đổi cấu trúc tài liệu có phương pháp để liên kết với những thư viện hoặc những ứng dụng khác. REST API không được xem là một dạng công nghệ tiên tiến mà đây là một giải pháp để tạo ra những ứng dụng web services sửa chữa thay thế cho những dạng khác như SOAP, WSDL, …Retrofit-trong-android

Hướng dẫn cách sử dụng Retrofit trong Android

Để sử dụng Retrofit bạn cần thêm dependency vào trong file build.gradle :

implementation 'com.squareup.retrofit2:retrofit:2.4.0'

implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

Retrofit Annotations

Bạn sẽ sử dụng Annotations để miêu tả nhu yếu HTTP :

  • Hỗ trợ các tham số URL và tham số truy vấn
  • Chuyển đổi đối tượng để mới có thể yêu cầu nội dung
  • Multipart request body và tệp tải lên

public interface StackOverflowApi {
Retrofit trong Android là gì? Tìm hiểu chi tiết về Retrofit 2
QUẢNG CÁO

@GET("/2.2/questions?order=desc&sort=creation&site=stackoverflow&tagged={tag}")

Observable loadQuestion(@Path("tag") String tag);

}

Annotation trên những phương pháp của interface và những tham số của nó sẽ cho biết cách giải quyết và xử lý nhu yếu .

Request Method

Mỗi phương pháp cần phải có Annotation HTTP phân phối những request method và URL. Có năm Annotation được tích hợp sẵn gồm có : @ GET, @ POST, @ PUT, @ DELETE và @ HEAD URL tương đối của tài nguyên đã được chỉ định trong Annotation .

@GET("users/list")

Bạn cũng hoàn toàn có thể chỉ định tham số truy vấn trong URL như sau :

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

Retrofit-trong-android

URL Manipulation

URL request hoàn toàn có thể được tự động hóa update bằng cách sử dụng những khối thay thế sửa chữa và những tham số trên phương pháp .Bạn hoàn toàn có thể sử dụng URL một cách tự động hóa dựa trên những biến truyền vào, bằng cách sử dụng annotation @ Path với lệnh dưới đây :

@GET("group/{id}/users")

Call> groupList(@Path("id") int groupId);

Bạn cũng hoàn toàn có thể nối thêm parameter vào sau URL bằng cách sử dụng annotation @ Query với lệnh dưới đây :

@GET("group/{id}/users")

Call> groupList(@Path("id") int groupId, @Query("sort") String sort);

Bạn hoàn toàn có thể sử dụng @ QueryMap so với một số ít phối hợp tham số truy vấn phức tạp bằng lệnh dưới đây :

@GET("group/{id}/users")

Call> groupList(@Path("id") int groupId, @QueryMap Map options);

Request Body

Một đối tượng người dùng hoàn toàn có thể được chỉ định làm phần thân yêu cầu HTTP với Annotation @ Body .

@POST("users/new")

Call createUser(@Body User user);

Đối tượng còn có thể được chuyển đổi bằng cách sử dụng Converter được chỉ định sẵn trên instance của Retrofit. Còn nếu không có Converter nào được thêm vào, bạn chỉ có thể sử dụng RequestBody.

Retrofit-trong-android

Form Encoded và Multipart

Các phương pháp cũng hoàn toàn có thể khai báo để gửi tài liệu được mã hóa và tài liệu multipart. Dữ liệu đã được mã hóa theo form sẽ gửi khi @ FormUrlEncoded được chỉ định trên phương pháp. Mỗi cặp key-value sẽ được chú thích bằng @ Field có chứa tên và đối tượng người dùng cung ứng giá trị .

@FormUrlEncoded

@POST("user/edit")

Call updateUser(@Field("first_name") String first, @Field("last_name") String last);

Trong khi đó, những nhu yếu multipart sẽ được sử dụng khi @ Multipart Open trên phương pháp. Các phần sẽ được khai báo bằng cách sử dụng @ Part

@Multipart

@PUT("user/photo")

Call updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);

Các phần của multiparts sử dụng một trong những bộ chuyển đổi của Retrofit hoặc chúng hoàn toàn có thể implement RequestBody để giải quyết và xử lý serialization của riêng chúng .

Converters

Retrofit được mặc định chỉ hoàn toàn có thể deserialize phần thân bản tin HTTP thành kiểu OkHttp’s ResponseBody và chỉ đồng ý kiểu RequetsBody cho Annotation @ Body .Converter cũng hoàn toàn có thể được thêm vào để tương hỗ những loại khác :

GSON: com.squareup.retrofit2:converter-gson

Gson được định nghĩa là một thư viện Java dùng để quy đổi những đối tượng người dùng Java thành trình diễn JSON của chúng. Ngược lại, Gson cũng hoàn toàn có thể dùng để quy đổi một chuỗi JSON thành một đối tượng người dùng Java tương tự .

public class Question {

@SerializedName("title")

@Expose

private String mTitle;

@SerializedName("link")

@Expose

private String mLink;

public String toString() {

return mTitle;

}

}

@SerializedName rất cần thiết cho Gson để ánh xạ các khóa JSON với các trường dữ liệu. Để thích hợp với quy ước đặt tên kiểu camelCase của Java cho các thuộc tính thành viên của lớp, bạn không được sử dụng dấu gạch dưới để tách các từ ngữ trong một biến.

@ Expose chỉ ra rằng trường này cần được định nghĩa với JSON serialization hoặc deserialization .Retrofit-trong-android

Tạo instance Retrofit

Ví dụ : Bạn hoàn toàn có thể tạo tạo interface cho API từ stackoverflow để lấy list bài đăng thuộc tag “ Android ” bằng lệnh :

public interface StackOverflowApi {

@GET("/2.2/questions?order=desc&sort=creation&site=stackoverflow&tagged={tag}")

Call loadQuestion(@Path("tag") String tag);

}

Tạo instance với Retrofit2 :

Retrofit retrofit = new Retrofit.Builder()

.baseUrl("https://api.stackexchange.com")

.addConverterFactory(GsonConverterFactory.create(gson))

.build();

Tiến hành Request đến API và giải quyết và xử lý hiệu quả trả về :

StackOverflowApi stackOverflowApi = retrofit.create(StackOverflowApi.class);

stackOverflowApi.loadQuestion("android")

.enqueue(new Callback() {

@Override

public void onResponse(Call call, Response response) {

//TODO Xử lý dữ liệu trả về

}

@Override

public void onFailure(Call call, Throwable t) {

//TODO Xử lý lỗi

}

});

Sử dụng Retrofit chuyên nghiệp sẽ giúp bạn triển khai những request một cách thuận tiện. Trên đây là những thông tin cơ bản về Retrofit trong Android, kỳ vọng đây sẽ là một kiến thức và kỹ năng mới cho những ai đang theo đuổi ngành lập trình .

FAQs về Retrofit

Tại sao nên dùng Retrofit?

Retrofit là một thư viện được tổ chức triển khai rất tốt, có tài liệu hướng không thiếu và khi sử dụng sẽ giúp bạn tiết kiệm chi phí rất nhiều thời hạn để giải quyết và xử lý những yếu tố không thiết yếu. Bên cạnh đó, sử dụng Retrofit sẽ nhanh hơn rất nhiều so với việc sử dụng Volley, AsyncTask

Type-Safe là gì?

Type-Safe là một trình biên dịch dùng để xác nhận những kiểu trong khi biên dịch và sẽ Open lỗi nếu bạn cố gắng nỗ lực gán sai kiểu cho một biến. Type-Safe sẽ không hề triển khai một thao tác trên một đối tượng người tiêu dùng không hợp lệ .

Annotation là gì?

Annotation được định nghĩa là một dạng chú thích hoặc một dạng siêu dữ liệu ( metadata ) được dùng để phân phối những thông tin dữ liệu cho mã nguồn Java. Các chú thích sẽ không có ảnh hưởng tác động trực tiếp đến những hoạt động giải trí của mã mà chúng đang chú thích. Annotation được thêm vào từ Java 5 .Các Annotation có trong mã nguồn sẽ được biên dịch thành dạng bytecode và sử dụng một kỹ thuật gọi là phản chiếu ( Reflection ) để truy vấn thông tin siêu dữ liệu, đồng thời sẽ đưa ra những hành vi thích hợp. Chúng ta hoàn toàn có thể chú thích cho những lớp ( class ), những biến ( variable ), phương pháp ( method ), những gói ( package ) và những tham số ( parameter ) trong thư viện Java .

Serialization là gì?

Trong Java, Serialization là chính sách dùng để quy đổi trạng thái của một đối tượng người dùng ( giá trị những thuộc tính trong object ) thành một chuỗi byte và chuỗi byte này cũng hoàn toàn có thể quy đổi ngược lại thành một đối tượng người tiêu dùng. Quá trình quy đổi chuỗi byte thành đối tượng người tiêu dùng còn gọi là deserialization ..Thông thường, khi sử dụng Serialization, Java object sẽ được quy đổi qua một dãy byte liên tục và tất cả chúng ta hoàn toàn có thể lưu chúng trong bộ nhớ, trên ổ đĩa, truyền qua mạng đến một server nào đó hoặc cũng hoàn toàn có thể lưu chúng vào database .Và khi có một tiến trình khác sử dụng Java object đã được Serialization, tiến trình đó sẽ được quy đổi định dạng sau khi Serialization trở về trạng thái của Java object bắt đầu .

CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO

  • Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh
    Văn phòng đại diện: 42 Trần Phú, Phường 4, Quận 5, Thành phố Hồ Chí Minh
  • Điện thoại: 0364 333 333
    Tổng đài miễn phí: 1800 6734
  • Email: [email protected]
  • Website: www.tino.org