Ktor 1.3正式版

Ktor 1.3最近发布了正式版,我们很高兴能在该博客中向你介绍详细的更新内容。

Ktor由两部分组成:服务器引擎和灵活的异步HTTP客户端。当前版本主要集中在HTTP客户端上。 可以在这里看到该版本的完整更新日志。 客户端是一个支持JVM,JS,Android和iOS的多平台库,现已在跨平台移动应用程序上广泛应用。我们下一版本的主要目标也是使服务器引擎也能跨平台。

其余我们将要研究的领域是:

  • 改善与kotlinx.serialization 库的集成。
  • 在Kotlin/Native上支持CIO (基于协程的I/O客户端引擎),并让其成为HttpClient中默认使用的多平台引擎。

如果你在使用Ktor的服务端或HttpClient,亦或是之前尝试过,请参加以下调查:

参与调查

我们非常欢迎你能分享使用心得!

现在,让我们深入了解Ktor 1.3版本带来的细节

HttpClient

HttpStatement简介

在以前的Ktor版本中,你需要显式closeHttpResponse。但这通常会让人感到混乱。我们发现很多情况下,即使是简单的示例,也有人忘记closeHttpResponse,因此而导致内存泄漏。为了改善这种情况,我们在Ktor 1.3中引入了不兼容的更改:HttpResponse不再实现Closeable接口。因此,Ktor1.3.0发行版不向后兼容旧版本的Ktor 1.2.X。

HttpResponse默认通过内存缓存,且已不再需要手动close了。

如果你的response较大或需要流式处理,请使用新的HttpStatement类。 HttpStatement类在显式调用execute方法前不会做任何网络请求:

例如,你可以按块来读取数据:

代理配置

HttpClient添加了对代理的实验性支持。如果需要通过代理发送请求,则可以在相应的参数中配置地址:

请注意,由于平台的限制,它仅支持JVM和Native目标(WatchOS除外),而不支持JavaScript。可以在这里中查看关于如何针对不同平台进行配置的更多详细信息。

在IOS引擎上使用NSURLSession

iOS引擎现在提供了一种配置NSURLSession的方法:

“NSURLSession”是iOS上进行HTTP/HTTPS协议请求的默认API,因此现在你可以使用它来调整所有与iOS相关的设置。

改善JSON上的体验

到目前为止,HttpClient和服务器均支持以下处于实验状态的更改。

简化对JSON集合的序列化

在以前的Ktor版本中,你需要注册辅助类型以序列化集合。现在该过程已简化:JsonFeature无需附加配置即可处理集合类型。因此所有相关的函数已被弃用,如setMapper,setListMapper和register。

不再需要在JsonFeature中注册List

在服务器上使用JSON时同样如此,可以在接收时使用泛型指定集合类型:

kotlinx.serialization DSL

Ktor现在支持一种通过kotlinx.serialization DSL构造JSON的方式:

要在客户端上使用,请安装JsonFeature并添加ktor-client-serialization依赖项。如在服务器上,使用SerializationConverter

如何迁移

要迁移你的Ktor应用到新版本,你需要:

  • 更新所有HttpResponse的用法:只需去掉close的调用,并在需要时使用HttpStatement
  • 更新import。删除kotlinx.io依赖项,因此你需要通过以下方式替换import:
    • import kotlinx.io. -> import io.ktor.utils.io.
    • import kotlinx.coroutines.io. -> import io.ktor.utils.io.

请注意,它与1.2.x没有二进制兼容性,因此,如果你使用任何第三方Ktor功能,则需要根据最新版本进行重新编译。另外,请确保您使用的是5.4.1+ Gradle元数据版本。

感谢你阅读本文,不要忘记参加调查!

参与调查

此条目发表在官方分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注