навіщо використовувати Retrofit, коли у нас є OkHttp


107

за допомогою OkHttp ми можемо зробити HTTP-запит, а потім отримати відповідь від сервера

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

тоді за допомогою Gson lib перетворять відповідь на потрібний нам об'єкт.

це з док. Square / OkHttp:

API його запиту / відповіді розроблений з вільними будівельниками та незмінністю. Він підтримує як синхронне блокування дзвінків, так і асинхронні виклики з зворотними дзвінками

Я читаю з stackOverFlow

Модернізація автоматично використовує OkHTTP, якщо він доступний

.

Отже, моє запитання - для чого саме «Модерніст»?

що Retrofit може зробити, що OkHttp не може ?!

Я думаю, що OkHttp та Gson вирішують проблему API запиту, і яку проблему Retrofit вирішують для нас?


2
Висновок, який може бути закритим як такий. Справа в тому, що вони існують і ніхто не загинув. Що означає, що обидва мають дійсні випадки використання в очах спільноти розробників Android.
fge

1
Перевірте цей пост stackoverflow.com/q/16902716/1144203
ivan.sim

@isim Я раніше бачив це посилання, але не можу зрозуміти, навіщо потрібна модернізація ?! і чому Retrofit використовують OkHttp!
Мехрдад Фараджі

@MehrdadFaraji Вам не потрібна модернізація, якщо OkHttp може робити те, що ви хочете. Чому для модернізації використовується OkHttp Деякі речі, як увімкнути Callшаблон OkHttp, перехоплювач OkHttp, закріплення сертифікатів тощо
ivan.sim

використання модернізації з rxjava стало звичною галузевою практикою, що є ще однією причиною використання модернізації
paul_hundal,

Відповіді:


95

з OkHttp ми можемо зробити HTTP-запит, потім отримати відповідь від сервера ... потім за допомогою Gson lib перетворити відповідь на потрібний нам об'єкт

Зауважте, що у своєму фрагменті коду ви пропустили два помітні кроки: генеруючи URL та фактично розбираючи JSON за допомогою Gson.

Отже, моє запитання - для чого саме «Модерніст»?

Він призначений для генерування URL-адреси (використовуючи згенерований типом код, прив’язаний до конкретного API REST) ​​та фактичного аналізу JSON за допомогою Gson. Іншими словами, він робить те, що ви пропустили у своєму фрагменті коду.

Крім того, для певних типів операцій REST (наприклад, POST) це допомагає трохи збирати те, що надсилати (наприклад, генерувати закодовану форму).

За визначенням, вам не потрібно використовувати Retrofit. Модернізація - це комп'ютерний код, написаний комп'ютерними програмістами. Хтось ще міг написати код, щоб робити те, що робить Retrofit.

чому Retrofit використовують OkHttp

Модернізація потребує виконання операцій HTTP. Він використовує OkHttp, де це можливо, для всього, що OkHttp забезпечує: підтримку HTTP / 2 та SPDY, підключаються перехоплювачі тощо.


32

Вам слід скористатись модернізацією, якщо ви намагаєтеся зіставити API свого сервера всередині програми (тип-сафінг). Модернізація - це лише адаптер API, накладений на okHTTP.

Якщо ви хочете ввести безпечний і модульний код взаємодії з вашим API, використовуйте модернізацію. Крім цього, основна ефективність, налаштування за замовчуванням тощо, okHTTP та Retrofit є однаковими.

Також я б рекомендував прослухати цей подкаст від Джессі Вілсона (розробника основних клієнтів Android HTTP), де він детально розповідає про історію розвитку клієнта Apache HTTP, HTTPURLConnection, okHTTP та Retrofit.


23

Retrofit vs. OkHttp Причина проста : OkHttp - це чистий клієнт HTTP / SPDY, відповідальний за будь-яку мережеву операцію низького рівня, кешування, маніпулювання запитами та відповідями та багато іншого. На відміну від цього, Retrofit - це високий рівень REST-абстракції на вершині OkHttp. Retrofit 2 сильно поєднується з OkHttp та інтенсивно використовує його.

Функції OkHttp: Об'єднання об'єднань, gzipping, кешування, відновлення з мережевими проблемами, синхронізація та асинхронізація дзвінків, переадресації, повторні спроби ... тощо.

Функції модернізації: маніпулювання URL-адресою, запит, завантаження, кешування, нарізка, синхронізація ... Це дозволяє синхронізувати та асинхронізувати дзвінки.


7

Retrofit - клієнт REST для Android та Java by Square. Це дозволяє порівняно легко отримувати та завантажувати JSON (або інші структуровані дані) через веб-сервіс на базі REST. У програмі Retrofit ви налаштовуєте, який перетворювач використовується для серіалізації даних. Зазвичай для JSON ви використовуєте GSon, але ви можете додати спеціальні перетворювачі для обробки XML або інших протоколів. Retrofit використовує бібліотеку OkHttp для HTTP-запитів. Вам слід використовувати модернізацію над okhttp для її зручності, для її особливостей.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.