Thrift的接口定义语言IDL
Thrift的IDL可以使用下面的語法來定義描述接口。
1 基本類型
bool:布爾值,true 或 falsebyte:8 位有符號整數i16:16 位有符號整數i32:32 位有符號整數i64:64 位有符號整數double:64 位浮點數string:字符串binary:二進制數據
2 容器類型
可以包含多個數據(元素)的類型。
-
list<type>:元素為type類型的列表,與python的list對應,如list<double> -
set<type>:元素為type類型且唯一的集合,與python的set對應,如set<i32> -
map<type1,type2>:鍵為type1類型值為type2類型的映射,與python的dict對應,如map<string,string>
3 常量類型
const 常量類型 常量名稱 = 常量值,如
const i32 INT32CONSTANT = 9853
const map<string,string> MAPCONSTANT = {'hello':'world', 'goodnight':'moon'}
4 枚舉類型
enum,一組32位整數常量,如
enum Operation {ADD = 1,SUBTRACT = 2,MULTIPLY = 3,
}
也可以省略常量值,如
enum Operation {ADD,SUBTRACT,MULTIPLY,
}
如果省略了常量值,則枚舉中的第一個為1,其次遞增。
在Python中以類保存枚舉常量值。
5 結構體類型
struct,封裝一組不同類型的數據,與Python中的類對應,如
struct Work {1: i32 num1 = 0,2: i32 num2,3: Operation op,4: optional string comment,
}
optional?關鍵字表示該字段值可選,如果構建的結構體類型數據中可選字段沒有設置值,則在編碼生成的消息數據中不會包含可選字段。
6 異常類型
exception,可以自定義異常中包含的數據內容,與Python中的類對應,如
exception InvalidOperation {1: i32 whatOp,2: string why
}
7 服務接口
service,定義服務接口的方法和參數,如
service BasicService {double divide(1:i32 num1, 2:i32 num2) throws (1:InvalidOperation e)oneway void ping()
}
說明:
- 方法可以不帶參數,如帶參數,須指明參數的序號和參數類型
- 方法名前須指明返回值類型,void表示沒有返回值
- oneway 表示客戶端發起請求后不再等待響應返回,oneway方法必須是void返回類型
- throws 表示可能拋出的異常
8 服務繼承
使用extends可以繼承擴展另一個服務,如
include "base.thrift"
service Calculate extends base.BasicService {i32 calculate(1:base.Work w) throws (1:base.InvalidOperation e)
}
9 其他
Thrfit支持多種注釋方法
# 單行注釋
// 單行注釋
/* 多行注釋 */
使用typedef可以為類型起別名,如
typedef i32 MyInteger
這里定義了一個新的類型MyInteger,這個MyInteger就是i32類型的別名。
10 編譯
使用thrift命令來編譯接口定義文件,生成程序代碼
thrift --gen 語言 接口定義文件
如
thrift --gen py basic.thrift
其中py 表示生成Python語言代碼,其他的語言參數名可以通過thrift -help命令查看。
對于有繼承服務的接口定義文件,可以添加-r參數,生成所有相關接口程序,如
thrift -r --gen py calculate.thrift
總結
以上是生活随笔為你收集整理的Thrift的接口定义语言IDL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7:Thrift的安装
- 下一篇: Thrift协议与传输选择