thrift idl語法

基本語法

基本類型

  • bool: 布爾值 對應Java中的boolean 
  • byte: 有符號字節 對應Java中的byte 
  • i16: 16位有符號整型 對應Java中的short 
  • i32: 32位有符號整型 對應Java中的int 
  • i64: 64位有符號整型 對應Java中的long 
  • double: 64位浮點型 對應Java中的double 
  • string: 字符串 對應Java中的String 
  • binary: Blob 類型 對應Java中的byte[]

容器類型

集合中的元素能夠是除了service以外的任何類型,包括exception。java

  • list<T>: 一系列由T類型的數據組成的有序列表,元素能夠重複
  • set<T>: 一系列由T類型的數據組成的無序集合,元素不可重複
  • map<K, V>: 一個字典結構,key爲K類型,value爲V類型,至關於Java中的HashMap<K,V>

結構體

就像C語言同樣,thrift也支持struct類型,目的就是將一些數據聚合在一塊兒,方便傳輸管理。struct的定義形式以下:shell

struct NPC
{
	1:i32 id;
	2:string name; 
}

 枚舉

枚舉的定義形式和Java的Enum定義差很少,例如:框架

enum Action {
    Idle,
      Attack,
    Run 
}

異常

thrift支持自定義exception,規則和struct同樣,以下:函數

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

服務

thrift定義服務至關於Java中建立Interface同樣,建立的service通過代碼生成命令以後就會生成客戶端和服務端的框架代碼。定義形式以下:ui

service HelloWordService {
     // service中定義的函數,至關於Java interface中定義的函數
     string doAction(1: string name, 2: i32 age);
 }

類型定義

 thrift支持相似C++同樣的typedef定義,好比:spa

typedef i32 Integer
typedef i64 Long

注意:末尾沒有逗號或者分號!code

常量

thrift也支持常量定義,使用const關鍵字,例如:字符串

const i32 MAX_RETRIES_TIME = 10;
const string MY_WEBSITE = "http://qifuguang.me";

末尾的分號是可選的,無關緊要,而且支持16進制賦值string

命名空間

thrift的命名空間至關於Java中的package的意思,主要目的是組織代碼。thrift使用關鍵字namespace定義命名空間,例如:io

namespace java com.game.lll.thrift

提示:格式是namespace 語言(Java)  路徑(com.game.lll.thrift), 注意末尾不能有分號。

文件包含

thrift也支持文件包含,至關於C/C++中的include,Java中的import,C#中的using。使用關鍵字include定義,例 如:

include "global.thrift"

註釋

 thrift註釋方式支持shell風格的註釋,支持C/C++風格的註釋,即#和//開頭的語句都單當作註釋,/**/包裹的語句也是註釋。

可選與必選

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

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

表示name是必填的,age是可選的。

thrift編譯

步驟一:建立一個文件,代碼以下:

namespace java com.game.lll.thrift

struct Request {
    1: string username;      
    2: string password;           
}

exception RequestException {
    1: required i32 code;
    2: optional string reason;
}

// 服務名
service LoginService {
    string doAction(1: Request request) throws (1:RequestException qe); // 可能拋出異常。
}

步驟二:在終端輸入命令thrift -gen java login.thrift後會在當前目錄下生成gen-java文件夾,該文件夾下會按照namespace定義的路徑名一次一層層生成文件夾,到gen-java/com/game/lll/thrift/目錄下能夠看到生成的3個.java類。這是個人目錄:

相關文章
相關標籤/搜索