thrift文件定义和生成接口方式

本文介绍了Thrift——一个跨语言的RPC框架,详细阐述了Thrift文件中包括的基本数据类型、字节类型、集合类型、枚举、结构体、服务接口、常量及包名定义,并提供了一个完整的Thrift文件示例。同时,文章还讲解了如何使用thrift.exe工具生成特定语言的接口代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介
thrfit是跨语言的rpc框架,这里介绍thrift文件的定义(各种数据类型)和生成接口方式。
二、thrift数据类型和结构
thrift数据类型和结构,官网地址:http://thrift.apache.org/docs/types
1、基本类型
这里直接引用官网上的定义,很好理解
bool: A boolean value (true or false)
byte: An 8-bit signed integer
i16: A 16-bit signed integer
i32: A 32-bit signed integer
i64: A 64-bit signed integer
double: A 64-bit floating point number
string: A text string encoded using UTF-8 encoding
2、字节类型
binary: a sequence of unencoded bytes
3、集合类型
list: 列表,定义时可直接赋值,如:  list<string> stuNameList=["apple", "pearl"]
set: 集合
map: 映射
4、enum枚举类型
enum定义枚举类型,默认从0开始赋值,也可以指定常量值 ,如:

enum level{
    GradeOne,
    GradeTwo=2,
    GradeThree=3
}

5、struct结构体
struct结构体定义实体(如java中的class),
字段格式为:序号:  类型 名称
示例如:

struct Stu{
    1: required string stuNo,
    2: optional i32 stuAge,
    3: bool isPass
}

6、service接口
service定义接口(接口可exetend其它接口),包含方法,参数同struct一样,需要加序号,如:

service Hello{
    Stu buildStu(1:string stuName);
}

7、const常量
const定义常量,如:const i32 step=3;
8、namespace包名
namespace定义包名,放在文件头,结构为:namespace 语言  包名
如:
namespace java com.dragon.study.thrift
三、thrift文件完整示例
thrift文件完整示例,如:
 

namespace java com.dragon.study.thrift
//namespace py ThriftTest


//添加其它文件
//include "type.thrift"

const i32 step=3;

const map<string,i32> stuNameAgeMap={"apple":11, "pearl":18}

const list<string> stuNameList=["apple", "pearl"]

const set<string> schoolNameSet=["sun", "moon"]

struct Stu{
    1: required string stuNo,
    2: optional i32 stuAge,
    3: bool isPass
}

enum level{
    GradeOne=1,
    GradeTwo=2,
    GradeThree=3
}

service Hello{
    Stu buildStu(1:string stuName);
}

四、thrift文件生成具体语言接口
thrift文件定义完后,接下来就需要根据文件生成指定语言文件的接口。
1、工具thrift.exe生成
下载生成工具 http://mirror.bit.edu.cn/apache/thrift/0.10.0/thrift-0.10.0.exe
执行命令:thrift --gen <language> <Thrift filename>
如:thrift.exe -gen java ThriftStudy.thrift




















 


















空类型
void










 

thrift-generator 是通过 Java 的接口生成 thrift 文件的工具。例子:public interface ICommonUserService {     public User login(int id, String name);     public User getUserById(long id);     public boolean saveUser(User user);     public List getUserIds(long id);      public Map getUserByIds(List ids);     public Map<String, List> getUsersByName(List names);     public Map<Long, List> getGroupUsers(List names, List userList, List lns, long ll);     public List testCase1(Map num1, List num2, List num3, long num4, String num5); } public class ThriftStructBuilderTest {     private ThriftFileBuilder fileBuilder = new ThriftFileBuilder();     @Test     public void toOutputstream() throws Exception {         this.fileBuilder.buildToOutputStream(ICommonUserService.class, System.out);     } }执行代码:mvn test -Dtest=com.sohu.thrift.generator.builder.ThriftStructBuilderTest之后控制台输出如下:namespace java com.sohu.thrift.generator.test.thrift     enum Status {             NORMAL = 0,             BLOCKED = 1     }     struct Account {             1:i32 id,             2:string name     }     struct User {             1:i32 id,             2:string name,             3:bool sex,             4:Status status,             5:list ids,             6:Account account     }     service ICommonUserService {             User login(1:i32 arg0,2:string arg1),             map<string, list> getUsersByName(1:list arg0),             bool saveUser(1:User arg0),             map getUserByIds(1:list arg0),             list getUserIds(1:i64 arg0),             map<i64, list> getGroupUsers(1:list arg0,2:list arg1,3:list arg2,4:i64 arg3),             User getUserById(1:i64 arg0),             list testCase1(1:map arg0,2:list arg1,3:list arg2,4:i64 arg3,5:string arg4)     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值