Thrift类型系统允许程序员尽可能使用本机类型,无论它们使用什么编程语言。此信息基于并取代位于Thrift白皮书中的信息。 Thrift IDL为每个目标语言生成代码的类型提供了描述。
一、基本数据类型
选择基本数据类型是为了简单和清晰,关注所有编程语言中都有的关键类型
· bool: 布尔型(true or false)
· byte: 字节,8位符号整型
· i16: 16位符号整型
· i32: 32位符号整型
· i64: 64位符号整型
· double: 64位浮点数
· string: UTF-8编码的字符串
备注:这里没有无符号整型,那是因为在许多编程语言中没有无符号整型。
二、特殊类型
binary: 没有编码的字节序列
备注:这是字符串类型的特殊形式,增加这个类型是为了同java更好的互操作。目前的计划是在某种程度上将其提升为基础类型。
三、结构Structs
Thrift中的Structs定义了通用的对象,它基本上等同于OOP语言中的类,但是没有继承功能。一个struct有一组强类型的字段,每一个字段由唯一的名字标识。字段可以有各种注释,如数字字段IDs、可选默认值等,这些在Thrift IDL里面有描述。
四、容易Containers
Thrift的容器是强类型的容器,映射成各种编程语言中的可用容器。
有三种容器类型:
· list: 元素的有序列表,转换为STL的vector,Java的ArrayList,脚本语言的本地舒展等等。
· set: 唯一元素的无序列表。转换成STL的set,Java的HashSet,Python的set,等等。PHP不支持set,因此会被转换为相似的List。
· map: 唯一键、值匹配。转换为STL的map,Java的HashMap,PHP的associative array,Python的Dictionary,等等。虽然提供了默认值,但是类型映射没有被明确的修改,添加了自定义代码生成指令,允许替换目标成目标语言中的自定义类型。
容器的类型可以是任何合法的Thrift类型。备注:为了最大限度的兼容,map的键类型应该为基本数据类型,而不应该是struct或container类型。有些语言不支持复杂的键类型。另外,JSON协议只支持键类型为基本数据类型。
五、异常Exceptions
异常在功能上等同于Structs,除了它们从本地异常基类继承外,以便与任何语言的本地异常平滑的集成。
六、服务Services
服务使用Thrift的类型定义,服务的定义在语义上等同于面向对象语言的接口定义(或纯虚类的定义)。Thrift编译器生成实现了接口的完全功能的客户端和服务器庄。
一个服务是一组命名函数的集合,每一个函数有参数列表和返回值。
备注:除了其他定义的Thrift类型外,void作为函数返回值是合法的。另外,oneway修饰符必须添加到void函数,这样生成的代码就不会等待返回。注意,纯void函数将返回一个回应给客户端以表面服务器上的操作已经完成。有oneway修饰符的方法,只能表明请求在传输层上成功传输,oneway方法在服务端可能同时执行,且执行的顺序也可能不一样。