介绍
基于proto文件可以快速生成bm
框架对应的代码,提前需要准备以下工作:
- 安装
kratos tool protoc
工具,请看kratos工具 - 编写
proto
文件,示例可参考kratos-demo内proto文件
kratos工具说明
kratos tool protoc
工具可以生成warden
bm
swagger
对应的代码和文档,想要单独生成bm
代码只需加上--bm
如:
# generate BM HTTP
kratos tool protoc --bm api.proto
proto文件说明
请注意想要生成bm
代码,需要特别在proto
的service
内指定google.api.http
配置,如下:
service Demo {
rpc SayHello (HelloReq) returns (.google.protobuf.Empty);
rpc SayHelloURL(HelloReq) returns (HelloResp) {
option (google.api.http) = { // 该配置指定SayHelloURL方法对应的url
get:"/kratos-demo/say_hello" // 指定url和请求方式为GET
};
};
}
使用
建议在项目api
目录下编写proto
文件及生成对应的代码,可参考kratos-demo内的api目录。
执行命令后生成的api.bm.go
代码,注意其中的type DemoBMServer interface
和RegisterDemoBMServer
,其中:
DemoBMServer
接口,包含proto
文件内配置了google.api.http
选项的所有方法RegisterDemoBMServer
方法提供注册DemoBMServer
接口的实现对象,和bm
的Engine
用于注册路由DemoBMServer
接口的实现,一般为internal/service
内的业务逻辑代码,需要实现DemoBMServer
接口
使用RegisterDemoBMServer
示例代码请参考kratos-demo内的http内的如下代码:
engine = bm.DefaultServer(hc.Server)
pb.RegisterDemoBMServer(engine, svc)
initRouter(engine)
internal/service
内的Service
结构实现了DemoBMServer
接口可参考kratos-demo内的service内的如下代码:
// SayHelloURL bm demo func.
func (s *Service) SayHelloURL(ctx context.Context, req *pb.HelloReq) (reply *pb.HelloResp, err error) {
reply = &pb.HelloResp{
Content: "hello " + req.Name,
}
fmt.Printf("hello url %s", req.Name)
return
}
文档
基于同一份proto
文件还可以生成对应的swagger
文档,运行命令如下:
# generate swagger
kratos tool protoc --swagger api.proto
该命令将生成对应的swagger.json
文件,可用于swagger
工具通过WEBUI的方式打开使用,可运行命令如下:
kratos tool swagger serve api/api.swagger.json