Thrift入门基础知识-Types类型说明(IDL类型简介)

Apache Thrift框架是一个跨语言RPC框架,通过Thrift的接口语言IDL(Thrift interface definition language)和代码生成工具来生成各个语言的服务代码,目前支持的语言有C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml和Delphi等等。Thrift能很方便的实现跨语言的服务调用,那么IDL文件的构成则是由Thrift规定的各种类型组成的,下面就来说说Thrift类型。

1、Base Types - 基本类型

基本类型没有包括所有的语言类型,主要是所有语言的关键类型。

  • bool:布尔类型(true或者false)
  • byte:字节类型
  • i8:8位有符号整型
  • i16:16位有符号整型
  • i32:32位有符号整型
  • i64:64位有符号整型
  • double:64位浮点类型
  • binary:字节数组类型
  • string:字符串类型
    注:Thrift基本类型中没有无符号整型
    例:
const  string name = 'hello'
const  i32 num1 = 1234

2、Containers - 容器类型

Thrift容器是强类型容器,可映射到大多数有容器类型的编程语言中的常用容器类型。使用Java泛型风格,一共有三种容器:

  • list:有序列表,可以包含重复值,type是指定的类型。例如转换为Java中的ArrayList、脚本语言中的数组等等
  • set:无序列表,无重复值,type是指定类型。例如转换为Java中的HashSet,Python中的set等等,另外PHP中没有set,所以最终是转换成类似的数组。
  • map:key-value表,key唯一,type1是key的类型,type2是value的类型。例如转换成功Java中的HashMap、PHP中的关联数组、Python/Ruby中的字典等等。
    例:
list
set 
map

3、Structs - 结构体

Thrift struct 类似于C的struct,是一系列相关数据的封装,在OOP语言中会转换为类(class)。一个struct由数据项组成,每个数据项包括一个唯一的数字标识、一个数据类型、一个名称和一个可选的默认值。
例:

struct Location {                          
    1: double latitude; //组成:数字标识:类型 名称
    2: double longitude;
}

struct Weibo {
    1: required i32 userId;             
    2: required string userName;          
    3: required string text;
    4: optional Location loc;    //可以引用外部结构体
    16: optional string language = "english" 
}

4、Exceptions - 异常

异常在功能上与struct基本一样,只是声明关键词不一样,在目标语言中会继承异常基类,这样可以与任何语言的本地异常处理无缝集成。
例:

exception Xception {
  1: i32 errorCode,
  2: string message
}

5、Services - 服务接口

服务相当于OOP编程中的interface(或者一个抽象类),客户端和服务端去实现这些具体的功能接口。服务由一组有名称的函数组成,每个函数都有一个参数列表和一个返回类型。无返回类型的函数可以使用void关键词,另外oneway关键词可以修饰void函数,使用oneway表示该函数生成不等待响应的代码,只发起请求,并不等待服务端响应。而void函数是会等待服务端的响应,以确保操作完成。
例:

service Publish {
  bool postWeibo(1:Weibo wb),  
  oneway void zip()
}

好了,Thrift类型就结束了,接下来说说IDL的规范。

你可能感兴趣的:(Thrift入门基础知识-Types类型说明(IDL类型简介))