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


目录
相关文章
|
JavaScript Java Linux
Go语言 thrift 入门指南--thrift IDL介绍
Thrift 是一个轻量级、跨语言的 RPC 框架,由 facebook 开发,2007年正式开源,2008 纳入 Apache 软件基金会开源项目。
1639 0
Go语言 thrift 入门指南--thrift IDL介绍
|
网络协议 Java 编译器
Thrift在C++中的使用
Thrift在C++中的使用
Thrift在C++中的使用
|
Java Go Apache
gRPC vs Thrift
远程过程调用(Remote Procedure Call,RPC)服务于分布式架构,本文从分布式构架面临的问题,期望的结果,引出两种比较受关注的RPC框架,并从框架的出身、实现原理、特性、性能等方面做了对比分析,从而给出两者之间的选择建议。
11376 0
|
6月前
|
Java 编译器 测试技术
Thrift
Thrift是一个用于跨语言服务开发的工具,可以轻松实现不同语言间的通信和数据交换 【2月更文挑战第27天】
79 1
|
XML JSON 编解码
Thrift 介绍
Thrift 介绍
169 0
|
自然语言处理 Java Apache
再识RPC-thrift
什么是Stub? Stub是一段代码,用来转换RPC过程中传递的参数。处理内容包括不同OS之间的大小端问题。另外,Client端一般叫Stub,Server端一般叫Skeleton。 生产方式: 1. 手动生成,比较麻烦; 2. 自动生成,使用IDL(InterfaceDescriptionLanguate),定义C/S的接口
473 0
再识RPC-thrift
|
JavaScript 前端开发 Java
初探 thrift
初探 thrift
237 0