Перейти к основному содержанию
Ktor 3.4: JetBrains улучшила работу с HTTP-клиентом и добавила двусторонний стриминг

Ktor 3.4: JetBrains улучшила работу с HTTP-клиентом и добавила двусторонний стриминг

Ktor 3.4: JetBrains улучшила работу с HTTP-клиентом и добавила двусторонний стриминг

JetBrains выпустила Ktor 3.4 — обновление Kotlin-фреймворка для асинхронной разработки серверных и клиентских приложений. Новый релиз расширяет возможности HTTP-клиента, добавляет поддержку duplex-стриминга в OkHttp и вводит механизм автоматической отмены запросов при отключении клиента.

Ktor 3.4: JetBrains улучшила работу с HTTP-клиентом и добавила двусторонний стриминг

Отмена HTTP-запросов при разрыве соединения

Одним из ключевых нововведений стал плагин HttpRequestLifecycle. Он позволяет автоматически отменять выполняющиеся HTTP-запросы, если клиент отключается до их завершения.

Это особенно полезно в случаях с:

  • длительными запросами,
  • ресурсоёмкими операциями,
  • потоковой обработкой данных.

При разрыве соединения корутина, обрабатывающая запрос, отменяется, вместе с ней завершаются все связанные launch или async-корутины. Механизм структурированной конкурентности при этом корректно освобождает ресурсы.

На текущий момент эта возможность поддерживается только для движков Netty и CIO.

Динамическая документация API

Ktor 3.4 также получил новый API для динамического документирования эндпоинтов, который работает в связке с новым компиляторным плагином.

В отличие от традиционного подхода со статическим Swagger-файлом, модель документации теперь формируется во время выполнения, на основе данных, встроенных в routing-дерево приложения.

Как это работает:

  • разработчик включает генерацию документации через Ktor Gradle Plugin;
  • описание эндпоинтов добавляется прямо в код с помощью нового API describe;
  • документация автоматически собирается на основе этих данных.

Такой подход упрощает поддержку документации и снижает риск рассинхронизации между кодом и API-описанием.

Duplex-стриминг в OkHttp

В версии 3.4 OkHttp client engine получил поддержку duplex-стриминга. Это позволяет клиенту одновременно отправлять тело запроса и получать данные ответа.

В обычных HTTP-вызовах сначала полностью отправляется запрос, и только затем начинается получение ответа. Duplex-стриминг снимает это ограничение и особенно полезен для:

  • потоковых API,
  • интерактивных сервисов,
  • сценариев с большим объёмом данных.

Функция доступна для соединений HTTP/2 и включается через свойство:

duplexStreamingEnabled в OkHttpConfig.

Поддержка Zstd в плагине Compression

Ещё одно улучшение — поддержка алгоритма сжатия Zstd в плагине Compression. Для этого добавлен модуль:

ktor-server-compression-zstd

Zstd отличается:

  • высокой степенью сжатия,
  • низкими задержками,
  • настраиваемым уровнем компрессии.

Это делает его удобным выбором для серверных приложений с высокими требованиями к производительности.

Итог

Ktor 3.4 делает фреймворк более удобным для сложных и высоконагруженных сценариев:

  • управление жизненным циклом HTTP-запросов стало безопаснее,
  • работа с потоковыми данными — гибче,
  • документация API — ближе к коду.

Обновление продолжает курс JetBrains на развитие Ktor как современного Kotlin-фреймворка для серверных и клиентских приложений.