Главная
АИ #17 (147)
Статьи журнала АИ #17 (147)
Введение в OkHttp: преимущества, функции и примеры использования

Введение в OkHttp: преимущества, функции и примеры использования

Автор(-ы):

Косовцов Николай Алексеевич

26 апреля 2023

Секция

Информационные технологии

Ключевые слова

OkHttp
Http
Android
Java
клиент
запросы
POST
GET

Аннотация статьи

В статье представлены результаты изучения и работы с библиотекой OkHttp. В результате анализа она сравнивается с аналогами, выделяются плюсы и минусы библиотеки, а также приводится пример ее использования.

Текст статьи

Введение

OkHttp работает на Android 5.0+ (API уровень 21+) и Java 8+. OkHttp использует Okio для высокопроизводительного ввода-вывода и стандартную библиотеку Kotlin. Обе библиотеки маленькие и обратно совместимые. OkHttp предоставляет эффективный HTTP-клиент для Android и Java-приложений. Он имеет продвинутые функции, такие как поддержка HTTP/2, пул соединений, прозрачное сжатие GZIP и кэширование ответов. Он также способен восстанавливаться от распространенных проблем с сетью и поддерживает современные функции TLS. OkHttp предоставляет как синхронные, так и асинхронные вызовы с помощью построителей запросов и неизменяемых объектов. Для использования OkHttp в своем проекте, вам нужно добавить зависимость в файл pom.xml или build.gradle. Также вам нужно добавить разрешение на интернет в файл AndroidManifest.xml. Для отправки и получения данных от веб-сервиса, вам нужно создать объект Request с URL и методом HTTP (GET, POST, PUT и т.д.), а затем передать его объекту Call для выполнения. Вы можете получить ответ в виде объекта Response или строки [1].

Достоинства и недостатки OkHttp

OkHttp имеет ряд преимуществ перед другими HTTP-клиентами, такими как:

  • Поддержка HTTP/2, которая позволяет использовать один сокет для всех запросов к одному хосту
  • Пул соединений, который уменьшает задержку запросов в отсутствие HTTP/2
  • Прозрачное сжатие GZIP, которое уменьшает размеры загрузки
  • Кэширование ответов, которое избегает повторного обращения к сети для одинаковых запросов
  • Бесшумное восстановление от распространенных проблем с сетью и альтернативное определение IP-адресов
  • Поддержка современных функций TLS, таких как TLS 1.3, ALPN и закрепление сертификатов
  • Поддержка синхронных и асинхронных вызовов с помощью построителей запросов и неизменяемых объектов [2].

Некоторыми недостатками OkHttp могут быть:

  • Необходимость добавления зависимости в файл pom.xml или build.gradle
  • Необходимость запрашивать разрешение на интернет в файле AndroidManifest.xml
  • Необходимость использовать AsyncTask или другой механизм для выполнения синхронных вызовов в фоновом потоке
  • Необходимость обрабатывать исключения IOException при выполнении запросов или чтении ответов
  • Необходимость самостоятельно парсить ответы в формате JSON или XML [2].

Что такое HTTP/2 и TLS?

HTTP/2 – это новая версия протокола HTTP, которая вводит ряд улучшений для эффективности и безопасности передачи данных в сети. HTTP/2 поддерживает мультиплексирование, сжатие заголовков, приоритеты потоков, серверный пуш и бинарный формат. HTTP/2 требует использования TLS 1.2 или выше для шифрования соединений и предотвращения атак [5].

TLS – это протокол защиты транспортного уровня, который обеспечивает конфиденциальность, аутентификацию и целостность данных при обмене информацией между приложениями и серверами. TLS использует асимметричное шифрование для обмена ключами, симметричное шифрование для защиты данных и хэш-функции для проверки подлинности данных. TLS поддерживает различные алгоритмы шифрования и сертификаты, которые позволяют проверять идентичность сторон. TLS также поддерживает расширения, такие как ALPN, которые позволяют согласовывать протоколы приложений во время рукопожатия TLS [4].

Какие аналоги OkHttp существуют?

Существует множество альтернатив OkHttp для работы с HTTP в Java и Android. Некоторые из них:

  • Retrofit – это библиотека, которая превращает HTTP API в интерфейс Java. Она использует OkHttp в качестве сетевого слоя и позволяет легко парсить ответы в формате JSON или XML с помощью конвертеров [6].
  • Netty – это фреймворк для разработки асинхронных сетевых приложений на Java. Он поддерживает HTTP/2, WebSocket, SSL/TLS и множество других протоколов [6].
  • Postman – это инструмент для тестирования и разработки HTTP API. Он позволяет создавать, отправлять и анализировать запросы и ответы с помощью удобного графического интерфейса [6].
  • RestSharp – это библиотека для работы с HTTP в .NET. Она поддерживает асинхронные вызовы, сериализацию и десериализацию данных, аутентификацию и кэширование [6].
  • Insomnia REST Client – это приложение для тестирования и отладки HTTP API. Он поддерживает GraphQL, OAuth 2.0, Multipart Form Data, Cookie Management и другие функции [6].
  • OpenAPI – это стандарт для описания REST API в формате YAML или JSON. Он позволяет генерировать документацию, клиентский и серверный код на основе спецификации API [6].

Пример работы с библиотекой OkHttp

Вот пример кода на Java с OkHttp, который отправляет GET-запрос к указанному URL и выводит его содержимое в виде строки:

// создаем клиент OkHttp

OkHttpClient client = new OkHttpClient();

// создаем запрос на основе URL

Request request = new Request.Builder()

  .url("https://www.vogella.com/index.html")

  .build();

// выполняем запрос и получаем ответ

try (Response response = client.newCall(request).execute()) {

  // читаем тело ответа в виде строки

  String responseBody = response.body().string();

  // выводим строку в консоль

  System.out.println(responseBody);

}

Листинг 1. Пример кода для отправки Get-запроса

Для отправки POST-запроса с OkHttp вам нужно создать объект RequestBody, который содержит данные, которые вы хотите отправить. Вы можете использовать разные типы RequestBody в зависимости от того, какой формат данных вы хотите отправить. Например, вы можете использовать FormBody для отправки параметров формы, или MediaType для отправки JSON или других типов данных.

Вот пример кода на Java с OkHttp, который отправляет POST-запрос с JSON-данными:

// создаем JSON-строку с данными

String json = "{\"id\":1,\"name\":\"John\"}";

// создаем RequestBody с типом application/json и JSON-строкой

RequestBody body = RequestBody.create(

  MediaType.parse("application/json"), json);

// создаем запрос на основе URL и RequestBody

Request request = new Request.Builder()

  .url("https://example.com/users/detail")

  .post(body)

  .build();

// выполняем запрос и получаем ответ

try (Response response = client.newCall(request).execute()) {

  // читаем тело ответа в виде строки

  String responseBody = response.body().string();

  // выводим строку в консоль

  System.out.println(responseBody);

}

Листинг 2. Пример кода для отправки POST-запроса

Вывод

OkHttp – это эффективный и современный HTTP-клиент для Android и Java приложений. Он имеет ряд преимуществ перед другими HTTP-клиентами, такими как:

  • Поддержка HTTP/2, которая позволяет уменьшить задержку и увеличить производительность сетевых запросов.
  • Пул соединений, который переиспользует открытые сокеты для разных запросов к одному хосту, экономя ресурсы и время.
  • Прозрачное сжатие GZIP, которое уменьшает размеры загружаемых данных.
  • Кэширование ответов, которое избегает повторных запросов к сети для одинаковых запросов.
  • Восстановление от общих проблем с соединением, таких как сбои или изменение IP-адресов сервиса.
  • Поддержка современных функций TLS, таких как TLS 1.3, ALPN и пиннинг сертификатов.
  • Простой и удобный API для создания и выполнения синхронных и асинхронных запросов с разными типами данных и параметрами.

Используя OkHttp, вы можете улучшить качество и надежность вашего сетевого взаимодействия в вашем приложении.

Рецензент – Глумов К. С.

Список литературы

  1. Основы OkHttp в Android-разработке. – Текст : электронный //  Хабр : [сайт]. – URL: https://habr.com/ru/articles/717900/
  2. OkHttp: удобный инструмент для разработки Android и Java приложений. – Текст : электронный // Brander : [сайт]. – URL: https://brander.ua/ru/technologies/okhttp
  3. Основы OkHttp в Android-разработке. – Текст : электронный // Tproger : [сайт]. – URL:  https://tproger.ru/articles/osnovy-okhttp-v-android-razrabotke-2/
  4. What is TLS (Transport Layer Security)? – Текст : электронный // Cloudflare : [сайт]. – URL: https://www.cloudflare.com/learning/ssl/transport-layer-security-tls/ (дата обращения: 19.04.2023).
  5. Introduction to HTTP/2. – Текст : электронный // web.dev : [сайт]. – URL: https://web.dev/performance-http2/ (дата обращения: 19.04.2023).
  6. What is OkHttp and what are its top alternatives? – Текст : электронный // Stackshare : [сайт]. – URL: https://stackshare.io/okhttp/alternatives (дата обращения: 19.04.2023).

Поделиться

431

Косовцов Н. А. Введение в OkHttp: преимущества, функции и примеры использования // Актуальные исследования. 2023. №17 (147). Ч.I.С. 32-35. URL: https://apni.ru/article/6074-vvedenie-v-okhttp-preimushchestva-funktsii

Другие статьи из раздела «Информационные технологии»

Все статьи выпуска
Актуальные исследования

#21 (203)

Прием материалов

18 мая - 24 мая

осталось 6 дней

Размещение PDF-версии журнала

29 мая

Размещение электронной версии статьи

сразу после оплаты

Рассылка печатных экземпляров

7 июня