Thrift IDL语法详解

本文旨在对于个人知识的梳理以及知识的分享,如果有不足的地方,欢迎大家在评论区指出


1. 基本数据类型
  • bool 布尔值
  • byte 有符号字节
  • i16 16位有符号整数
  • i32 32位有符号整数
  • i64 64位有符号整数
  • double 64位浮点数
  • string 字符串,对应Java中的String
  • binary Blob类型,对应Java中的byte[]
  • list 有序表,对应Java中的ArrayList
  • set 不允许元素重复,对应Java中的HashSet
  • map 键不允许重复,对应Java中的HashMap,map的key最好是thrift的基本类型,有些语言不支持复杂类型的key,JSON协议只支持那些基本类型的key
2. 常量定义
  1. 简介
    Thrift允许定义跨语言使用的常量
  2. 实例
    const i32 INT_CONST = 1234
    
2. struct 结构体
  1. 简介
    thrift中struct是定义为一种对象,和面向对象语言中的Class差不多,但是具有一下的一些约束:
    • struct不能继承,但是可以嵌套,不可以嵌套自己
    • 其成员都会有明确的数据类型
    • 其中的每一个成员都被正整数编号,编号是不可以重复的,方便之后传输过程中的编码
    • 成员之间的分隔符可以是’,‘或者’;’,并且是可以混用的,但是为了清晰起见,建议只使用一种
    • 字段会有required和optional两种,optional表示当前字段可以不填充,而required表示当前字段需要被填充
    • 每个字段可以设置默认值
    • 同一个文件中可以定义多个struct,也可以定义在不同的文件中,通过import来引入
  2. 实例
    struct Item{
    	1: required i64 id,
    	2: required string title,
    	3: required string content,
    	
    	10: optional map extra
    }
    
3. enum 枚举
  1. 简介
    当定义一个类型或者消息状态时,它只能是预定义的值列表中的一个,可以用枚举来实现
  2. 实例
    enum Item{
    	IS_REGISTER = 1  # 已注册
        IS_DISPATCHED = 2  # 已分配
    	IS_CONTACTED = 3  # 已联络
    }
    
4. exception 异常
  1. 简介
    异常在语法和功能上类似于结构体(struct),差别是异常使用关键字exception,而且异常是继承每种语言的基础异常类
  2. 实例
    exception Item{
    	1: i32 errorCode,
    	2: string message,
    	3: string userInfo
    }
    
5. service 服务
  1. 简介
    服务的定义方法在语意上等同于面向对象语言中的接口
  2. 实例
    service ItemService {
    	GetItemResponse GetItem (1: GetItemRequest req), // 定义了GetItem方法,且只有一个参数
    }
    
6. namespace 名字空间
  1. 简介
    Thrift中的命名空间类似于Java中的package,它提供了一种组织代码的简便方式
  2. 实例
    namespace java com.example.test
    namespace go com.example.test
    
7. comment 注释
  1. 简介
    与Java中的注释方式一致
  2. 实例
      // => 单行注释
      /**/ => 多行注释
    
8. include 依赖
  1. 简介
    便于管理、重用和提高模块性/组织性,Thrift允许文件包含其他的Thrift文件,用户需要使用thrift文件名作为前缀访问被包含的对象
  2. 实例
    include "test.thrift"
    

你可能感兴趣的:(我的架构之路,thrift)