前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Thrift的接口定义语言IDL

Thrift的接口定义语言IDL

作者头像
Lansonli
发布2021-10-09 15:53:08
1.3K0
发布2021-10-09 15:53:08
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客

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

1 基本类型

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

2 容器类型

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

3 常量类型

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

代码语言:javascript
复制
const i32 INT32CONSTANT = 9853
const map<string,string> MAPCONSTANT = {'hello':'world', 'goodnight':'moon'}

4 枚举类型

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

代码语言:javascript
复制
enum Operation {
  ADD = 1,
  SUBTRACT = 2,
  MULTIPLY = 3,
}

也可以省略常量值,如

代码语言:javascript
复制
enum Operation {
  ADD,
  SUBTRACT,
  MULTIPLY,
}

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

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

5 结构体类型

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

代码语言:javascript
复制
struct Work {
  1: i32 num1 = 0,
  2: i32 num2,
  3: Operation op,
  4: optional string comment,
}

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

6 异常类型

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

代码语言:javascript
复制
exception InvalidOperation {
  1: i32 whatOp,
  2: string why
}

7 服务接口

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

代码语言:javascript
复制
service BasicService {
    double divide(1:i32 num1, 2:i32 num2) throws (1:InvalidOperation e)
    oneway void ping()
}

说明:

  • 方法可以不带参数,如带参数,须指明参数的序号和参数类型
  • 方法名前须指明返回值类型,void表示没有返回值
  • oneway 表示客户端发起请求后不再等待响应返回,oneway方法必须是void返回类型
  • throws 表示可能抛出的异常

8 服务继承

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

代码语言:javascript
复制
include "base.thrift"
service Calculate extends base.BasicService {
    i32 calculate(1:base.Work w) throws (1:base.InvalidOperation e)
}

9 其他

Thrfit支持多种注释方法

代码语言:javascript
复制
#  单行注释
//  单行注释
/* 多行注释  */

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

代码语言:javascript
复制
typedef i32 MyInteger

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

10 编译

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

代码语言:javascript
复制
thrift --gen 语言 接口定义文件

代码语言:javascript
复制
thrift --gen py basic.thrift

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

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

代码语言:javascript
复制
thrift -r --gen py calculate.thrift
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 基本类型
  • 2 容器类型
  • 3 常量类型
  • 4 枚举类型
  • 5 结构体类型
  • 6 异常类型
  • 7 服务接口
  • 8 服务继承
  • 9 其他
  • 10 编译
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档