fbpx
close

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

Tác giả: Đông Tùng Ngày cập nhật: 22/11/2021 Chuyên mục: Webmasters
Disclosure
Website Wiki.tino.org được cung cấp bởi Tino Group. Truy cập và sử dụng website đồng nghĩa với việc bạn đồng ý với các điều khoản và điều kiện trong chính sách bảo mật - điều khoản sử dụng nội dung. Wiki.tino.org có thể thay đổi điều khoản sử dụng bất cứ lúc nào. Việc bạn tiếp tục sử dụng Wiki.tino.org sau khi thay đổi có nghĩa là bạn chấp nhận những thay đổi đó.
Why Trust Us
Các bài viết với hàm lượng tri thức cao tại wiki.tino.org được tạo ra bởi các chuyên viên Marketing vững chuyên môn và được kiểm duyệt nghiêm túc theo chính sách biên tập bởi đội ngũ biên tập viên dày dặn kinh nghiệm. Mọi nỗ lực của chúng tôi đều hướng đến mong muốn mang đến cho cộng đồng nguồn thông tin chất lượng, chính xác, khách quan, đồng thời tuân thủ các tiêu chuẩn cao nhất trong báo cáo và xuất bản.

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 phát triển. Retrofit hỗ trợ cho các nhà lập trình chuyển đổi API thành Java Interface để dễ dàng kết nối đế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 phổ biến hiện nay trong việc hỗ trợ giao tiếp giữa client và server trở lên thuận tiện hơn. Thư viện này rất mạnh mẽ cho phép bạn dễ dàng xử lý dữ liệu JSON hoặc XML và sau đó sẽ phân tích cú pháp thành Plain Old Java Objects (POJOs). Tại đây, hầu hết các yêu cầu như GET, POST, PUT, PATCH, và DELETE đều có thể được thực hiện.

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 chuyển đổi cấu trúc dữ liệu có phương thức để kết nối với các 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ệ mà đây là một giải pháp để tạo ra các ứng dụng web services thay thế cho các 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 để mô tả yêu cầ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 {

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

Observable<StackOverflowQuestion> loadQuestion(@Path("tag") String tag);

}

Annotation trên các phương thức của interface và các tham số của nó sẽ cho biết cách xử lý yêu cầu.

Request Method

Mỗi phương thức cần phải có Annotation HTTP cung cấp các request method và URL. Có năm Annotation được tích hợp sẵn bao gồm: @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 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 có thể được tự động cập nhật bằng cách sử dụng các khối thay thế và các tham số trên phương thức.

Bạn có thể sử dụng URL một cách tự động dựa trên các 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<List<User>> groupList(@Path("id") int groupId);

Bạn cũng 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<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);

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

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

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

Request Body

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

@POST("users/new")

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

@FormUrlEncoded

@POST("user/edit")

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

Trong khi đó, các yêu cầu multipart sẽ được sử dụng khi @Multipart xuất hiện trên phương thức. Các phần sẽ được khai báo bằng cách sử dụng @Part

@Multipart

@PUT("user/photo")

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

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

Converters

Retrofit được mặc định chỉ có thể deserialize phần thân bản tin HTTP thành kiểu OkHttp’s ResponseBody và chỉ chấp nhận kiểu RequetsBody cho Annotation @Body.

Converter cũng có thể được thêm vào để hỗ trợ các loại khác:

GSON: com.squareup.retrofit2:converter-gson

Gson được định nghĩa là một thư viện Java dùng để chuyển đổi các đối tượng Java thành biểu diễn JSON của chúng. Ngược lại, Gson cũng có thể dùng để chuyển đổi một chuỗi JSON thành một đối tượng Java tương đương.

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 có thể tạo tạo interface cho API từ stackoverflow để lấy danh sách 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<StackOverflowQuestion> 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à xử lý kết quả trả về :

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

stackOverflowApi.loadQuestion("android")

.enqueue(new Callback<StackOverflowQuestion>() {

@Override

public void onResponse(Call<StackOverflowQuestion> call, Response<StackOverflowQuestion> response) {

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

}

@Override

public void onFailure(Call<StackOverflowQuestion> call, Throwable t) {

//TODO Xử lý lỗi

}

});

Sử dụng Retrofit chuyên nghiệp sẽ giúp bạn thực hiện các request một cách dễ dàng. Trên đây là những thông tin cơ bản về Retrofit trong Android, hy vọng đây sẽ là một kiến thức 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 rất tốt, có tài liệu hướng đầy đủ và khi sử dụng sẽ giúp bạn tiết kiệm rất nhiều thời gian để xử lý các vấn đề không cần thiết. 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 các kiểu trong khi biên dịch và sẽ xuất hiện lỗi nếu bạn cố gắng gán sai kiểu cho một biến. Type-Safe sẽ không thể thực hiện một thao tác trên một đối tượ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 để cung cấp các thông tin dữ liệu cho mã nguồn Java. Các chú thích sẽ không có ảnh hưởng trực tiếp đến những hoạt động 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 động thích hợp. Chúng ta có thể chú thích cho các lớp (class), các biến (variable), phương thức (method), các gói (package) và các tham số (parameter) trong thư viện Java.

Serialization là gì?

Trong Java, Serialization là cơ chế dùng để chuyển đổi trạng thái của một đối tượng (giá trị các thuộc tính trong object) thành một chuỗi byte và chuỗi byte này cũng có thể chuyển đổi ngược lại thành một đối tượng. Quá trình chuyển đổi chuỗi byte thành đối tượng còn gọi là deserialization..

Thông thường, khi sử dụng Serialization, Java object sẽ được chuyển đổi qua một dãy byte liên tục và chúng ta 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 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 chuyển đổi định dạng sau khi Serialization trở về trạng thái của Java object ban đầu.

Đông Tùng

Senior Technology Writer

Là cử nhân Quản trị kinh doanh của Trường Đại học Tài chính - Marketing, Tùng bắt đầu làm việc tại Tino Group từ năm 2021 ở vị trí Content Marketing để thỏa mãn niềm đam mê viết lách của bản thân. Sở hữu khả năng sáng tạo đặc biệt, anh cùng đội ngũ của mình đã tạo nên những chiến dịch quảng cáo độc đáo cùng vô số bài viết hữu ích về nhiều chủ đề khác nhau. Sự tỉ mỉ, kiên trì và tinh thần sáng tạo của Tùng đã góp phần lớn vào thành công của Tino Group trong lĩnh vực marketing trực tuyến.

Xem thêm bài viết

Bài viết liên quan

Mục lục

Xem nhiều

giá tốt, chất lượng cao mình rất hài lòng
chất lượng dịch vụ tốt lắm...á
chất lượng dịch vụ rất tốt.
giá tốt, chất lượng cao mình rất hài lòng
Tino giá tốt,chất lượng cao,dịch vụ tư vấn và hổ trợ khách hàng tận tâm.
tôi rất thích sử dụng dịch vụ tại tinohostinohost. tốc độ tải nhanh và cực kỳ rẻ
Dịch vụ chăm sóc khách hàng tốt
Dùng rất oke nha mọi người
Dịch vụ chăm sóc khách hàng tốt, mình rất hài lòng về dịch vụ của TINOHOST
Đã mua rất nhiều tên miền tại Tinohost. Chất lượng tốt
Dịch vụ tốt, chăm sóc khách hàng chu đáo. Mình rất yên tâm khi sử dụng các dịch vụ của Tinohost.
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
tuyệt vời chăm sóc khách hàng quá tốt
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
Quá tốt - Quá xuất sắc và tuyệt
Hỗ trợ nhiệt tình. dịch vụ chất lượng
Đội ngũ support rất nhiệt tình.
Sử dụng dịch vụ của bạn Tinohost 2 3 năm nay chưa khi nào phải thất vọng.
dịch vụ hỗ trợ rất nhanh, tốc độ hosting tốt
Hộ trợ tốt, nhanh. Tuyệt vời 🥰
tuyệt vời, dịch vụ cực tốt và hỗ trợ siêu nhanh
Làm việc nhanh chóng, giá thành hợp lí.
Chất lượng phục vụ tốt, hỗ trợ khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
Hosting rẻ và nhanh thích hợp cho học sinh sinh viên như mình
dịch vu tốt ! Sẽ sử dụng thưởng xuyên !
Mỗi lần cần gì, nhắn Tino là được hỗ trợ ngay. Nên một đứa không biết gì về web như mình cũng tạo được blog. Cơ bản mình chỉ lo viết, mọi thứ có anh IT của Tino lo hết.
Nhìn chung thì Tino xứng đáng là một trong những nhà cung cấp host giá rẻ #1 tại VN. Bên này support khá nhanh và nhiệt tình nên quá trình sử dụng diễn ra tương đối trơn tru.
Chất lượng quá ok so với mức giá. Các SME có thể tham khảo để dựng web nhé.
uy tín chất lượng chuẩn cho 5 sao
Dịch vụ nhanh chóng thanh toán tiện lợi
Dịch vụ nhanh chóng, giá cả hợp lý
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
Dịch vụ tốt, giá cả hợp lý👍
Rất hay, rất tốt, rất hữu ích
Hỗ trợ rất nhanh và nhiệt tình
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
dịch vụ tốt, thanh toán nhanh chống
Hài lòng dịch vụ của tinohost
Sau khi sử dụng dịch vụ của TinoHost. Mình thấy website load nhanh hơn hẳn so với sử dụng ở nhà cung cấp cũ. Giá cả do mình đc mua với giá sale 99% của TinoHost nên rất là rẻ. Gói mình mua là gòi Hosting Bussiness 20GB. Thông số cấu hình cao nên web load khá mượt
Chúc TinoHost phát triển!
domain rẻ, có nhiều gói hữu ích thích hợp cho sinh viên
Dịch vụ tốt . Support nhiệt tình
Chất lượng OK
Nhanh chóng
Đã gia hạn thêm gói 1 năm nữa của TINO host. Chất lượng sản phẩm và dịch vụ thật sự tốt. AE nên trải nghiệm thử và tin dùng. Thank you TINO 👍
dịch vụ rất tốt
Nhân viên support nhanh, hỗ trợ nhiệt tình, giao dịch tự động nên khá tiện
Đã dùng nhiều dịch vụ tại Tinohost, chất lượng tốt, rất hài lòng ...😀
Các bạn hỗ trợ làm việc nhiệt tình và chuyên nghiệp!
Sự dụng rất hài lòng với các dịch vụ của tinohost
Dịch vụ tốt, uy tín chất lượng
Tino dịch vụ quá tuyệt vời
Giá rẻ, dịch vụ tốt, hỗ trợ nhanh chóng
dịch vụ rất tốt rất tuyệt vời
Giá hợp lý cho người mới dùng
Mình thấy Tinohost có giao diện thân thiện, dễ đăng ký sử dụng cho người mới tập tành làm web như mình. Hosting hỗ trợ có nhiều lựa chọn về dung lượng và giá cả! Thanh toán qua momo thuận tiện. Recommended!
wed quá ok làm việc nhanh ngọn
Dịch vụ tốt. Khá hài lòng vì support nhiệt tình
Dịch vụ quá tuyệt vời danh cho các bạn
đội sp của Tino rất nhiệt tình và nhanh chóng
Xin cảm ơn đội ngủ kỹ thuật. Các bạn rất chuyên nghiệp và thân thiện. Tôi sẽ giới thiệu các bạn cho bạn bè của mình.
Dịch vụ hỗ trợ tốt, ổn định, thanh toán dễ dàng.
Mình từng dùng VPS bên Vietel IDC, hay gặp lỗi vặt và bảo trì liên tục. Nhưng Tino thì rất ok
dùng tốt, nhanh, dễ sử dụng
Giao diện đẹp mắt, dễ sử dụng
Thích cách tư vấn tận tình và nhanh gọn của Tino mỗi khi có vấn đề trục trặc. Hosting ổn định, giá rẻ tốt lắm nhé mọi người
Đề nghị xem lại vấn đề phục vụ khách hàng (livchat)!
Good. Tốc độ cao. Tùy chỉnh nhiều trên shared hosting.
hosting ngon, giá luôn rẻ, tôi làm code nhưng rất thích sài host tino
Tino cung cấp host rất chuyên nghiệp. Đội ngũ kỹ thuật hỗ trợ rất tận tâm và nhiệt tình. Mình sẽ tiếp tục ủng hộ Tino 🥰.
Rất tuyệt vời🙆🙆🙆🙆🙆🙆🙆🙆🙆
Xét về tầm giá thì TinoHost rất đáng để mua và sử dụng lâu dài.
Dịch vụ chất lượng, ủng hộ 1 năm nay rồi
tuyệt vời quá đi,tuyệt vời quá đi
Tốc độ ổn định, tư vấn nhiệt tình
mới tham gia, mong mọi người hỗ trợ thêm
Tốc độ khá tốt với gói rẻ nhất 9k
Giao dịch nhanh,support nhanh và tận tình,chuyển miền nhanh,Hosting Ok
mua sản phẩm dịch vụ tinhot rất tốt tặng ad 5tr ** luon nè🥰🥰🥰
tinohost
một truong những nơi bán hosting rẻ, chất lượng dành cho anh em nào cần để làm web
mua tại : tinohost.com
Tư vấn tận tình và nhanh gọn mỗi khi có vấn đề trục trặc. Hosting ổn định, giá rẻ tốt lắm nhé mọi người
mình đã mua 2 tên miền + hosting của Tino Host . quả nhiên hiệu quả SEO cải thiện đáng kể và chứng chỉ bảo mật HTTPS miễn phí của Tino Host cũng ko kém phần quang trọng cho việc SEO website của mình
Tino host là một trong nhà cung cấp tốt nhất mình từng sử dụng. Với ưu đãi khuyến mại nhiều, giá thành rẻ kèm theo đó là sự support tuyệt vời của các admin. Nếu ai chưa lựa chọn được nhà cung cấp cho bản thân mình thì Tinohost sẽ là câu trả lời tốt nhất.
dịch vụ tốt, đội ngũ support nhiệt tình, cảm ơn #tinohost
Uy tín, chất lượng, nhân viên hỗ trợ nhiệt tình
mua 2 domain tại tinohost dùng rất chất lượng
Đã mua 02 domain và hosting tại TinoHost, hài lòng cách tư vấn và chăm sóc khách hàng của TinoHost :)
Giá rẻ cấu hình mạnh, black friday là sự bùng nổ của Tino
Hay web bán tài nguyên rất ngon
dịch vụ tốt, mua luôn host chất lượng cao của công ty nhân dịp blackfriday, cảm ơn #tinohost
Dịch vụ rất tốt, nhân viên tận tình.
Hỗ trợ nhiệt tình nhất trong các nhà cung cấp mih từng dùng. Không những server mạnh, ưu đãi có 1 không 2 mà còn nhiều plugin pro bản quyền đính kèm nữa. Quyết định gắn bó "Lifetime" với tino 😁
Dịch vụ tốt hỗ trợ nhanh chóng
Thích cách tư vấn tận tình và nhanh gọn của Tino mỗi khi có vấn đề trục trặc. Hosting ổn định, giá rẻ tốt lắm nhé mọi người
mình có mua 2 tên msiền của tino, mình rât thích cách tư vấn và chăm sóc khách hàng tại đây. Ngoài ra giá domain khá rẻ, phù hợp cho mọi người. 5 sao
Dịch vụ tốt, support nhiệt tình
tinohost tuyệt vời giá cả hợp lý
domain mua rất rẻ :))))
tốt, chất lượng, hostingok
Next Reviews
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é, Q. 1, TP. Hồ Chí Minh

Văn phòng kinh doanh: Số 42 Trần Phú, Phường 4, Quận 5, TP HCM
GPKD số 0315679836 do Sở KH và ĐT TP Hồ Chí Minh cấp
Hotline: 0364 333 333
Góp ý/Phản ánh dịch vụ: 0933 000 886