go-zero中api和rpc的使用步骤

rpc模块的学习

如果会api模块的编写,rpc文件相差的并不是很多。

image-20240801102155835

看这个目录,主要区别就是少了hander,多了server和最下边两个pb文件,以及client文件夹。

主要运行过程是,先将想要写的接口传入参数和传出参数写到proto文件中:

syntax = "proto3";
option go_package ="./pb";  //
package pb;
// 登录请求消息
message LoginRequest {
  string userName = 1;
  string password = 2;
}
// 登录响应消息
message UserLoginResponse {
  string token = 1; // 修改为 token 而不是 Authorization 更符合常规
}
// 用户信息请求消息
message UserInfoRequest {
  string authorization = 1; // 对应于请求头中的 Authorization
}
// 用户信息响应消息
message UserInfoResponse {
  string userName = 1;
  uint32 id = 2;
}
// 用户服务定义
service UserClient {
  // 登录接口
  rpc Login (LoginRequest) returns (UserLoginResponse);

  // 获取用户信息接口
  rpc GetUserInfo (UserInfoRequest) returns (UserInfoResponse);
}
 //   goctl rpc proto -src user.proto -dir .


具体写法可以去官方文档查看。

然后运行命令

 goctl rpc protoc user.proto --go_out=./types --go-grpc_out=./types --zrpc_out=.

为了讲解明白,就用api层和rpc层接口一致来示例:

当我们生成rpc后,为了和api连接:先将rpc注册到etcd(能够让api发现)

image-20240801104922956

为了让api连接,需要将api的config文件中加上rpc的etcd地址

image-20240801105814135

(配置文件中添加etcd的地址和键,找指定的rpc的值)

image-20240801105448712

还有最后一步,依赖注入。

由于我们要在api层调用rpc层的方法,肯定是要先声明userclient才能直接调用到里边的方法

image-20240801110150944

至此,api和rpc的连接已经完成了,然后将api层的逻辑放入到rpc的logic中。

看一个示例:该方法为通过token获取用户信息的get请求。
api的logic层:
image-20240801111144488

通过调用rpc层的方法返回该方法的响应info,返回info中的参数。

rpc层的logic:

image-20240801111334717

具体的逻辑实现,解析token中的id和name,返回给api层的logic。

这个例子没有体现出数据库操作,具体的,当涉及到数据库时,将model层和rpc层与api层并列,让rpc调用到model层的方法,让api层调用rpc层的方法实现。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值