Thrift的IDL可以使用下面的语法来定义描述接口。
bool
:布尔值,true 或 falsebyte
:8 位有符号整数i16
:16 位有符号整数i32
:32 位有符号整数i64
:64 位有符号整数double
:64 位浮点数string
:字符串binary
:二进制数据可以包含多个数据(元素)的类型。
const 常量类型 常量名称 = 常量值
,如
const i32 INT32CONSTANT = 9853
const map<string,string> MAPCONSTANT = {'hello':'world', 'goodnight':'moon'}
enum
,一组32位整数常量,如
enum Operation {
ADD = 1,
SUBTRACT = 2,
MULTIPLY = 3,
}
也可以省略常量值,如
enum Operation {
ADD,
SUBTRACT,
MULTIPLY,
}
如果省略了常量值,则枚举中的第一个为1,其次递增。
在Python中以类保存枚举常量值。
struct
,封装一组不同类型的数据,与Python中的类对应,如
struct Work {
1: i32 num1 = 0,
2: i32 num2,
3: Operation op,
4: optional string comment,
}
optional 关键字表示该字段值可选,如果构建的结构体类型数据中可选字段没有设置值,则在编码生成的消息数据中不会包含可选字段。
exception
,可以自定义异常中包含的数据内容,与Python中的类对应,如
exception InvalidOperation {
1: i32 whatOp,
2: string why
}
service
,定义服务接口的方法和参数,如
service BasicService {
double divide(1:i32 num1, 2:i32 num2) throws (1:InvalidOperation e)
oneway void ping()
}
说明:
使用extends
可以继承扩展另一个服务,如
include "base.thrift"
service Calculate extends base.BasicService {
i32 calculate(1:base.Work w) throws (1:base.InvalidOperation e)
}
Thrfit支持多种注释方法
# 单行注释
// 单行注释
/* 多行注释 */
使用typedef
可以为类型起别名,如
typedef i32 MyInteger
这里定义了一个新的类型MyInteger,这个MyInteger就是i32类型的别名。
使用thrift命令来编译接口定义文件,生成程序代码
thrift --gen 语言 接口定义文件
如
thrift --gen py basic.thrift
其中py 表示生成Python语言代码,其他的语言参数名可以通过thrift -help
命令查看。
对于有继承服务的接口定义文件,可以添加-r
参数,生成所有相关接口程序,如
thrift -r --gen py calculate.thrift