Thrift的接口定义语言IDL

简介: Thrift的接口定义语言IDL

Thrift的IDL可以使用下面的语法来定义描述接口。


1 基本类型



  • bool:布尔值,true 或 false
  • byte:8 位有符号整数
  • i16:16 位有符号整数
  • i32:32 位有符号整数
  • i64:64 位有符号整数
  • double:64 位浮点数
  • string:字符串
  • binary:二进制数据


2 容器类型



可以包含多个数据(元素)的类型。


list<type>:元素为type类型的列表,与python的list对应,如
list<double>
set<type>:元素为type类型且唯一的集合,与python的set对应,如
set<i32>
map<type1,type2>:键为type1类型值为type2类型的映射,与python的dict对应,如
map<string,string>


3 常量类型



const 常量类型 常量名称 = 常量值,如


const i32 INT32CONSTANT = 9853
const map<string,string> MAPCONSTANT = {'hello':'world', 'goodnight':'moon'}


4 枚举类型



enum,一组32位整数常量,如


enum Operation {
  ADD = 1,
  SUBTRACT = 2,
  MULTIPLY = 3,
}


也可以省略常量值,如


enum Operation {
  ADD,
  SUBTRACT,
  MULTIPLY,
}


如果省略了常量值,则枚举中的第一个为1,其次递增。


在Python中以类保存枚举常量值。


5 结构体类型



struct,封装一组不同类型的数据,与Python中的类对应,如


struct Work {
  1: i32 num1 = 0,
  2: i32 num2,
  3: Operation op,
  4: optional string comment,
}


optional 关键字表示该字段值可选,如果构建的结构体类型数据中可选字段没有设置值,则在编码生成的消息数据中不会包含可选字段。


6 异常类型



exception,可以自定义异常中包含的数据内容,与Python中的类对应,如


exception InvalidOperation {
  1: i32 whatOp,
  2: string why
}


7 服务接口



service,定义服务接口的方法和参数,如


service BasicService {
    double divide(1:i32 num1, 2:i32 num2) throws (1:InvalidOperation e)
    oneway void ping()
}


说明:


方法可以不带参数,如带参数,须指明参数的序号和参数类型

方法名前须指明返回值类型,void表示没有返回值

oneway 表示客户端发起请求后不再等待响应返回,oneway方法必须是void返回类型

throws 表示可能抛出的异常


8 服务继承



使用extends可以继承扩展另一个服务,如


include "base.thrift"
service Calculate extends base.BasicService {
    i32 calculate(1:base.Work w) throws (1:base.InvalidOperation e)
}


9 其他



Thrfit支持多种注释方法


#  单行注释
//  单行注释
/* 多行注释  */


使用typedef可以为类型起别名,如


typedef i32 MyInteger


这里定义了一个新的类型MyInteger,这个MyInteger就是i32类型的别名。


10 编译



使用thrift命令来编译接口定义文件,生成程序代码


thrift --gen 语言 接口定义文件


thrift --gen py basic.thrift


其中py 表示生成Python语言代码,其他的语言参数名可以通过thrift -help命令查看。


对于有继承服务的接口定义文件,可以添加-r参数,生成所有相关接口程序,如


thrift -r --gen py calculate.thrift


目录
相关文章
|
SQL 关系型数据库 MySQL
GORM V2 安装和连接 MySQL
GORM V2 安装和连接 MySQL
1148 0
|
SQL 存储 数据处理
Flink SQL 问题之提交程序运行报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
649 3
|
缓存 算法 关系型数据库
Mysql(3)—数据库相关概念及工作原理
数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
905 5
Mysql(3)—数据库相关概念及工作原理
|
12月前
|
存储 算法 网络安全
Intel QAT 加速的数据压缩和 TLS 加解密技术 | 龙蜥大讲堂 102 期
Intel QAT(QuickAssist Technology)加速的数据压缩和TLS加解密技术,由Intel网络与边缘事业部唐志军分享。课程涵盖QAT简介、数据压缩、安全应用及价值主张,重点介绍QAT在CPU密集型任务中的加速作用,如对称/非对称加密、数据压缩等。通过QAT,可大幅提升性能,节省CPU资源,优化存储和网络传输效率,适用于网络安全、虚拟机迁移、大数据处理等场景。
827 0
|
网络协议 Go
golang判断ip地址是ipv4还是ipv6
golang判断ip地址是ipv4还是ipv6
|
内存技术
top命令里内存参数 VIRT, RES 和 SHR 分别是什么意思
top指令输出的VIRT, RES 和SHR有什么区别
3342 0
|
应用服务中间件 nginx
如何优雅打印nginx header和body
场景 参考https://segmentfault.com/a/1190000000606867可以获取response的报文体,由于业务测试有获取响应头Header或响应体Body的需求,这里是通过header_filter_by_lua来分配响应报文头给变量实现的。
10626 0
|
NoSQL Redis
goFrame v2.6 gredis 报错
goFrame v2.6 gredis 报错问题解决
387 0
|
Web App开发 关系型数据库 MySQL
namedmanager 一个用户管理 bind 的 web gui
namedmanager 作用 使用新的 Amberphplib 框架,兼容 MySQL 5.6 STRICT SQL模式 是一个基于 Web 的 DNS 管理系统,可用来添加、调整和删除 DNS 的 zones/records 数据,支持 Bind 作为后端的 DNS 服务,支持 IPv4 和 IPv6.   namedmanager 软件安装方法   下载仓库地址 wge
3864 0

热门文章

最新文章