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 teststruct User {1:i32 id2:string name3: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>
