tại sao lại sử dụng Retrofit khi chúng tôi có OkHttp


106

với OkHttp, chúng tôi có thể thực hiện yêu cầu HTTP sau đó nhận phản hồi từ máy chủ

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url(url)
  .build();
Response response = client.newCall(request).execute();

thì với Gson lib chuyển đổi phản hồi thành đối tượng mà chúng ta cần.

đây là từ Square / OkHttp doc:

API yêu cầu / phản hồi của nó được thiết kế với các trình xây dựng thông thạo và tính bất biến. Nó hỗ trợ cả cuộc gọi chặn đồng bộ và cuộc gọi không đồng bộ với các cuộc gọi lại

Tôi đọc từ stackOverFlow

Retrofit sử dụng OkHTTP tự động nếu có

.

Vì vậy, câu hỏi của tôi là chính xác Retrofit là gì?

những gì Retrofit có thể làm mà OkHttp không thể ?!

Tôi nghĩ OkHttp và Gson giải quyết vấn đề API yêu cầu, vậy Retrofit giải quyết vấn đề gì cho chúng tôi?


2
Dựa trên ý kiến ​​và như vậy có khả năng được đóng lại như vậy. Thực tế của vấn đề là, cả hai đều tồn tại và không có cái nào đã chết. Có nghĩa là cả hai đều có các trường hợp sử dụng hợp lệ trong mắt cộng đồng nhà phát triển Android.
fge

1
Kiểm tra bài đăng này stackoverflow.com/q/16902716/1144203
ivan.sim

@isim Tôi đã thấy liên kết này trước đây, nhưng tôi không thể hiểu tại sao lại cần Trang bị thêm ?! và tại sao Retrofit lại sử dụng OkHttp!
Mehrdad Faraji

@MehrdadFaraji Bạn không cần Trang bị thêm nếu OkHttp có thể làm những gì bạn muốn. Tại sao Trang bị thêm sử dụng OkHttp Một vài thứ như bật Callmẫu OkHttp, đánh chặn OkHttp, ghim chứng chỉ, v.v.
ivan.sim 27/08/2016

sử dụng trang bị thêm với rxjava đã trở thành một thực tiễn ngành chung, đó là một lý do khác cho việc sử dụng trang bị thêm
paul_hundal

Câu trả lời:


95

với OkHttp, chúng tôi có thể thực hiện yêu cầu HTTP sau đó nhận phản hồi từ máy chủ ... sau đó với Gson lib chuyển đổi phản hồi thành đối tượng chúng tôi cần

Lưu ý rằng trong đoạn mã của mình, bạn đã bỏ qua hai bước đáng chú ý: tạo URL và thực sự phân tích cú pháp JSON bằng Gson.

Vì vậy, câu hỏi của tôi là chính xác Retrofit là gì?

Nó là để tạo URL (sử dụng mã được tạo nhận biết loại gắn với API REST cụ thể của bạn) và thực sự phân tích cú pháp JSON bằng Gson. Nói cách khác, nó thực hiện những gì bạn đã bỏ qua trong đoạn mã của mình.

Ngoài ra, đối với một số loại hoạt động REST (ví dụ: POST), nó sẽ giúp một chút trong việc tập hợp những gì cần gửi (ví dụ: tạo biểu mẫu được mã hóa).

Theo định nghĩa, bạn không cần phải sử dụng Retrofit. Retrofit là mã máy tính, được viết bởi các lập trình viên máy tính. Ai đó có thể viết mã để làm những gì Retrofit làm.

tại sao Trang bị lại sử dụng OkHttp

Trang bị thêm cần thực hiện các hoạt động HTTP. Nó sử dụng OkHttp nếu có, cho tất cả những gì OkHttp cung cấp: hỗ trợ HTTP / 2 và SPDY, các bộ đánh chặn có thể cắm được, v.v.


32

Bạn nên sử dụng trang bị thêm nếu bạn đang cố gắng ánh xạ API máy chủ của mình bên trong ứng dụng của mình (kiểu bảo mật). Retrofit chỉ là một bộ điều hợp API được bao bọc bởi okHTTP.

Nếu bạn muốn nhập mã an toàn và mô đun hóa mã tương tác với API của mình, hãy sử dụng trang bị thêm. Ngoài ra, hiệu suất cơ bản, mặc định yêu cầu, v.v. của okHTTP và Retrofit đều giống nhau.

Ngoài ra, tôi cũng khuyên bạn nên nghe podcast này từ Jesse Wilson (nhà phát triển các ứng dụng HTTP android lớn), nơi anh ấy nói chuyên sâu về lịch sử phát triển của ứng dụng Apache HTTP, HTTPURLConnection, okHTTP và Retrofit.


23

Trang bị thêm so với OkHttp Lý do rất đơn giản : OkHttp là một ứng dụng HTTP / SPDY thuần túy chịu trách nhiệm cho bất kỳ hoạt động mạng cấp thấp nào, bộ nhớ đệm, thao tác yêu cầu và phản hồi, v.v. Ngược lại, Retrofit là một bản xây dựng trừu tượng REST cấp cao trên OkHttp. Retrofit 2 được kết hợp chặt chẽ với OkHttp và tận dụng nó một cách chuyên sâu.

Chức năng OkHttp: Tổng hợp kết nối, gzipping, lưu vào bộ nhớ đệm, khôi phục các sự cố mạng, đồng bộ hóa và không đồng bộ hóa các cuộc gọi, chuyển hướng, thử lại…, v.v.

Chức năng trang bị thêm: thao tác URL, yêu cầu, tải, bộ nhớ đệm, phân luồng, đồng bộ hóa ... Nó cho phép các cuộc gọi đồng bộ và không đồng bộ.


7

Retrofit là một REST Client cho Android và Java của Square. Nó giúp việc truy xuất và tải lên JSON (hoặc dữ liệu có cấu trúc khác) tương đối dễ dàng thông qua một Webservice dựa trên REST. Trong Retrofit, bạn định cấu hình bộ chuyển đổi nào được sử dụng để tuần tự hóa dữ liệu. Thông thường đối với JSON, bạn sử dụng GSon, nhưng bạn có thể thêm bộ chuyển đổi tùy chỉnh để xử lý XML hoặc các giao thức khác. Retrofit sử dụng thư viện OkHttp cho các yêu cầu HTTP. Bạn nên sử dụng trang bị thêm trên okhttp cho dễ dàng, cho các tính năng của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.