我们正在为iOS、macOS和Linux引入一个使用Swift Codable的ApacheThrift的新库。这个新的Thrift库是一个开源的、独立的、轻量级的数据编码库。当苹果平台需要与Twitter后台的特定端点进行通信时,我们现在在客户端使用的就是这个编码库。
今天,我们很高兴与大家分享Twitter Apache Thrift,这样Twitter以外的iOS开发者就可以开始使用Thrift数据了。
什么是Thrift
Thrift是一种开源的界面描述语言,类似于谷歌的Protobuf。Thrift和Protobuf非常相似,主要区别在于将其转换为二进制的序列器实现。在Twitter,我们主要用它来存储数据和在服务之间进行通信。
例如,当有人对Tweet提出请求时,Tweet服务将与Tweet元数据服务对话,这些服务都在Thrift中。然后Tweet服务会将元数据合并到Thrift模型中。然后Scrooge,我们的后端Thrift库,会将Thrift模型转换为JSON,供客户使用。
为什么是Thrift
我们想在新的遥测系统中使用Swift,因为Twitter应用中的大多数新功能都是用Swift开发的。我们之前用于Thrift的库只支持Objective-C,而且使用起来并不直观。
我们之前的系统在Objective-C中混合使用了JSON和Thrift。新系统的目标之一是要有更多的结构化数据。JSON并不适合我们的目的,因为它缺乏强大的类型和我们需要的结构。我们选择Thrift也是因为它的编码数据比JSON小。
此推特不可用
该库的初稿是在黑客周期间创建的。最初,我们的目标是熟悉实现一个Swift编码器和解码器。然后我们把它整合到了Twitter应用中,并且已经使用了一年多,没有出现任何重大问题。我们还为它增加了新的功能,比如对Compact Thrift的支持。
该设计
Twitter Apache Thrift是以Swift包的形式实现的,你可以在Xcode中轻松添加到你的项目中。除了基础系统框架之外,它没有任何依赖性。
Twitter Apache Thrift是建立在Codable协议上的。如果你使用过内置的Swift JSON编码器/解码器,使用Thrift的应该是很直观的。使用ThriftEncoder类和encode方法对Thrift数据进行编码。
此Tweet不可用
解码也同样简单。使用ThriftDecoder类和解码方法对Thrift数据进行解码。
此Tweet不可用
构建在Swift Codable上的Thrift模型也为我们提供了免费的JSON编码。在调试我们的遥测系统时,JSON编码很有帮助,因为它是一种人类可读的格式。
我们还支持用Twitter Scrooge项目自动生成代码。当用Scrooge生成代码时,它会自动创建一个只有TwitterApacheThrift作为依赖关系的Swift包,从而可以轻松集成到你的项目中。我们为你的模型提供了Swift类或结构和Objective-C支持的选项。你可以在Scrooge文档中找到更多信息。
建立这个库使得在Twitter应用中使用Thrift变得很容易。当我们建立一个新的功能时,我们不必考虑如何实现模型,并让它们从Thrift解码;它只是工作。我们甚至在后端看到了这个功能的胜利。例如,我们看到离开数据中心的数据量没有明显增加。我们还能够重构一些使用Objective-C库的代码,我们只是简单地将新的库放入其中。
我在哪里可以找到这个Thrift库?
Twitter Apache Thrift项目可以在Twitter的GitHub页面找到。
查看我们其他的iOS开源项目,包括。
贡献吗?
我们很希望得到你的贡献!请参考CONTRIBUTING.md了解详情。
此推特不可用