зачем использовать Retrofit, когда у нас есть OkHttp

109

с 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!
Mehrdad Faraji
@MehrdadFaraji Вам не нужна модернизация, если OkHttp может делать то, что вы хотите. Зачем при модернизации использовать OkHttp Некоторые вещи, такие как включение Callшаблона OkHttp, перехватчика OkHttp, закрепления сертификатов и т. Д.
ivan.sim
использование модернизации с помощью rxjava стало обычной отраслевой практикой, что является еще одной причиной использования модернизации
paul_hundal

Ответы:

96

с OkHttp мы можем сделать HTTP-запрос, а затем получить ответ от сервера ... затем с помощью Gson lib преобразовать ответ в объект, который нам нужен

Обратите внимание, что в своем фрагменте кода вы пропустили два важных шага: создание URL-адреса и фактический анализ JSON с помощью Gson.

Итак, мой вопрос: для чего именно нужна модернизация?

Он предназначен для создания URL-адреса (с использованием сгенерированного кода с поддержкой типов, привязанного к вашему конкретному REST API) и фактического анализа JSON с помощью Gson. Другими словами, он делает то, что вы пропустили во фрагменте кода.

Кроме того, для некоторых типов операций REST (например, POST) это немного помогает в сборке того, что нужно отправить (например, создание закодированной формы).

По определению, вам не нужно использовать дооснащение. Модернизация - это компьютерный код, написанный программистами. Кто-то другой мог бы написать код, чтобы делать то, что делает Retrofit.

почему Retrofit использует OkHttp

Требуется модернизация для выполнения операций HTTP. Он использует OkHttp там, где это возможно, для всего, что предоставляет OkHttp: поддержка HTTP / 2 и SPDY, подключаемые перехватчики и т. Д.

CommonsWare
источник
32

Вам следует использовать модернизацию, если вы пытаетесь сопоставить API-интерфейс вашего сервера внутри своего приложения (сохранение типов). Retrofit - это просто адаптер API, обернутый поверх okHTTP.

Если вы хотите ввести безопасный тип и модульность кода взаимодействия с вашим API, используйте модернизацию. Помимо этого, базовая производительность, параметры запроса по умолчанию и т. Д. OkHTTP и Retrofit одинаковы.

Также я бы рекомендовал послушать этот подкаст от Джесси Уилсона (разработчика основных HTTP-клиентов для Android), в котором он подробно рассказывает об истории разработки HTTP-клиента Apache, HTTPURLConnection, okHTTP и Retrofit.

geekoraul
источник
24

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

Функции OkHttp: объединение соединений, сжатие, кэширование, восстановление после сетевых проблем, синхронизация и асинхронные вызовы, перенаправления, повторные попытки… и так далее.

Функции дооснащения: манипулирование URL-адресами, запрос, загрузка, кеширование, потоки, синхронизация ... Это позволяет синхронизировать и асинхронные вызовы.

Wubbalubbadubdub
источник
7

Retrofit - это клиент REST для Android и Java от Square. Это позволяет относительно легко получать и загружать JSON (или другие структурированные данные) через веб-службу на основе REST. В Retrofit вы настраиваете, какой преобразователь будет использоваться для сериализации данных. Обычно для JSON вы используете GSon, но вы можете добавить собственные конвертеры для обработки XML или других протоколов. Retrofit использует библиотеку OkHttp для HTTP-запросов. Вы должны использовать retrofit вместо okhttp из-за его простоты и возможностей.

Мальти Девнани
источник