Thrift IDL

Thrift IDL

Thrift 是一个 RPC 框架,是典型的 C/S 架构,采用 IDL 来定义接口

基本数据类型

  • bool: 布尔值 true or false
  • byte: 有符号字节
  • i16: 16位有符号整数
  • i32: 32位有符号整数
  • i64: 64位有符号整数
  • double: 64位浮点数
  • string: 编码无关字符串
  • void: 返回为空

复合类型

struct
相当于 C 语言中的结构体和面向对象思想中的类,将多种数据类型整合起来

1
2
3
4
5
6
7
8
struct User {
1: i32 id,
2: string user_name,
3: required bool is_admin,
4: optional string nick_name,
5: optional string sex = "male",
20: optional string city,
}

注:

  • optional 表示该字段可选
  • requeired 表示该字段必填
  • 序号不可以重复,但不是必须连续
    enum
    枚举类型
1
2
3
4
5
enum UserType {
BLOCKED = 0,
NORMAL = 1,
ADMIN = 2,
}

容器

Thrift 提供了三种容器类型,list、map 和 set

  • list 相当于 Java 中的 ArrayList
  • map<T1, T2> 相当于 Java 中的 HashMap
  • set 相当于 Java 中的 HashSet

异常

Thrift 支持自定义异常

1
2
3
exception NotFound {
1: string message,
}

注:编写服务端代码时,除了在代码中抛出异常,还要在定义接口时,指明该接口可能抛出的异常

Service

类似于 Java 中的 interface

1
2
3
4
5
service UserService {
User query_user(1: i32 user_id) throws (
1: NotFound not_found),
User add_user(1: User user);
}

命名空间

1
namespace [java/cpp/py] com.example.project

参考

Thrift 教程