Thrift
数据类型
1. 基本数据类型
# bool: A boolean value (true or false)
# byte: An 8-bit signed integer
# i16: A 16-bit signed integer
# i32: A 32-bit signed integer
# i64: A 64-bit signed integer
# double: A 64-bit floating point number
# string: A text string encoded using UTF-8 encoding
通过const定义常量
2. 特殊的数据类型
# binary :主要是JAVA
3. 结构体类型
//基本数据定义结构如下
struct <结构体名称> {
<序号>:[字段性质]<字段类型><字段名称> [=<默认值>] [;|,]
}
//例子
struct Test {
1:i32 INT32CONTEST = 1,
}
//
struct User {
required string name, //required 声明该字段为必传字段
optional i32 age=0, //optional 声明该字段为非必传字段,所有字段默认为optional
}
struct的一些约束
- struct 不能继承,但是可以嵌套,但是不能嵌套自己
- 其成员必须是明确类型的
- 成员是被正整数编号过的,其编号不能重复,这个是为了在传输过程中编码使用
- 成员分隔符可以是逗号或者分号,而且可以间隔使用
- 字段会有
optional
和required
的之分,如果不指定则为无类型(可以不填充该值),但是在序列化的时候,也会填充进去,但是optional是不填充则不序列化,required是必须填充也必须序列化- 每个字段可以设置默认值
- 同一个文件可以定义多个struct,也可以在不同的文件,进行include导入
4. 枚举类型
# Thrift 不支持枚举嵌套,枚举常量必须是32位正整数
enum HttpStatus {
OK = 200,
NOTFOUND = 404,
}
5. 异常类型
#定义异常
exception <异常名> {
[序号]:<字段类型> 异常信息
}
# 抛出异常
throws ([序号]:<异常名> 异常字段)
6. service类型
service HelloService {
i32 sayInt(1:i32 param),
string sayString(1:string param),
bool sayBoolean(1:bool param),
void sayVoid()
}
namespace py test
struct User {
1:i32 id
2:string name
3:i32 age=0
}
service UserService {
User getById(1:i32 id),
bool isExist(1:string name)
}
可以通过thrift -r --gen 语言名(py) 文件名
来创建一个新的thrift代码
7. namespace类型
namespace py test//类似于module
8. 容器类型
# 1. map 字典
map <t1,t2>
# 2. list 列表
list<t1>
# 3. set 集合
set<t1>