Thrift的接口定義語言基本語法


1.類型

thrift的類型系統包括預定於的基本類型,用戶自定義結構體,容器類型,異常和服務定義。

thrift不支持無符號類型,因為很多編程語言不存在無符號類型。

(1.1)基本類型

bool:布爾類型(true or false),占用一個字節

byte:字節

i16:16位整型

i32:32位整型

i64:64位整型

double:64位浮點數

binary:未經過編碼的字節流

string:未知編碼或者二進制字符串

 

(1.2)容器類型

Thrift容器與類型密切相關,它與當前流行編程語言提供的容器類型相對應,采用java泛型風格表示的。Thrift提供了3種容器類型

list<t1>:一系列的t1類型組成的有序表,元素可以重復。

set<t1>:一系列的t1類型組成的無序集合,元素不可以重復。

map<t1,t2>:以t1為key,t2為value的鍵值對,t1不可以重復。

容器的類型可以是除了service之外的任何Thrift類型包括結構體和異常。

 

(1.3)結構體和異常

Thrift的結構體與C語言的結構體相似,一種將各種相關屬性封裝在一起的方式,在面向對象的語言中,它們常被轉換成類。

異常與結構體類似,但是它的聲明使用exception而不是struct,在語義上不同於struct,當定義遠程調用服務時,開發者可能需要聲明一個遠程方法拋出一個異常。

struct People {
    1: string name;
    2: i32 age;
}

exception RequestException {
    1: i32 code;
    2: string error_info;
}

 

(1.4)服務

服務的定義類似於面向對象編程中的接口定義。

Service支持繼承,一個service可使用extends關鍵字繼承另一個service。

service HelloWord {
    string  Action(1: string name, 2: i32 age);
}

 

(1.5)類型定義

thrift支持C/C++中的typedef

typedef i32 MyInteger   

typedef Tweet ReTweet

 

(1.6)枚舉類型

thrift可以使用枚舉

 

enum TweetType {
    TWEET,       
    RETWEET = 2,  
    DM = 0xa,    
    REPLY
}

 

struct Tweet {
    1: required i32 userId;
    2: required string userName;
    3: required string text;
    4: optional Location loc;
    5: optional TweetType tweetType = TweetType.TWEET 
    6: optional string language = "english"
}
說明:

a.  編譯器默認從0開始賦值

b.  可以賦予某個常量某個整數

c.  允許常量是十六進制整數

d.  末尾沒有逗號

e.  給常量賦缺省值時,使用常量的全稱

 

(1.7)常量

thrift支持常量,使用關鍵字const

const i32 INT_MAX= 10

const map<string,string> MAP_CONST = {"hello": "world", "goodnight": "moon"}

 

2.注釋

thrift支持shell風格的注釋,也支持C/C++風格。

 

3.命名空間

thrift的命名空間與C++的命名空間和java的pakeage類似

格式:namespace 語言名 路徑

 

4.文件包含

相當於C++的include和java的import,使用關鍵字include定義

include  "tweet.thrift"

 

5.定義結構體

thrift提供兩個關鍵字required,optional,分別用於表示對應的字段時必填的還是可選的。

結構體中可以包含結構體。

struct Location {                            
    1: required double latitude;
    2: required double longitude;
}struct Tweet {
    1: required i32 userId;                  
    2: required string userName;              
    3: required string text;
    4: optional Location loc;                
    5: optional string language = "english"
}

 參考鏈接:http://diwakergupta.github.io/thrift-missing-guide/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM