介绍

基于proto文件可以快速生成bm框架对应的代码,提前需要准备以下工作:

kratos工具说明

kratos tool protoc工具可以生成warden bm swagger对应的代码和文档,想要单独生成bm代码只需加上--bm如:

  1. # generate BM HTTP
  2. kratos tool protoc --bm api.proto

proto文件说明

请注意想要生成bm代码,需要特别在protoservice内指定google.api.http配置,如下:

  1. service Demo {
  2. rpc SayHello (HelloReq) returns (.google.protobuf.Empty);
  3. rpc SayHelloURL(HelloReq) returns (HelloResp) {
  4. option (google.api.http) = { // 该配置指定SayHelloURL方法对应的url
  5. get:"/kratos-demo/say_hello" // 指定url和请求方式为GET
  6. };
  7. };
  8. }

使用

建议在项目api目录下编写proto文件及生成对应的代码,可参考kratos-demo内的api目录

执行命令后生成的api.bm.go代码,注意其中的type DemoBMServer interfaceRegisterDemoBMServer,其中:

  • DemoBMServer接口,包含proto文件内配置了google.api.http选项的所有方法
  • RegisterDemoBMServer方法提供注册DemoBMServer接口的实现对象,和bmEngine用于注册路由
  • DemoBMServer接口的实现,一般为internal/service内的业务逻辑代码,需要实现DemoBMServer接口

使用RegisterDemoBMServer示例代码请参考kratos-demo内的http内的如下代码:

  1. engine = bm.DefaultServer(hc.Server)
  2. pb.RegisterDemoBMServer(engine, svc)
  3. initRouter(engine)

internal/service内的Service结构实现了DemoBMServer接口可参考kratos-demo内的service内的如下代码:

  1. // SayHelloURL bm demo func.
  2. func (s *Service) SayHelloURL(ctx context.Context, req *pb.HelloReq) (reply *pb.HelloResp, err error) {
  3. reply = &pb.HelloResp{
  4. Content: "hello " + req.Name,
  5. }
  6. fmt.Printf("hello url %s", req.Name)
  7. return
  8. }

文档

基于同一份proto文件还可以生成对应的swagger文档,运行命令如下:

  1. # generate swagger
  2. kratos tool protoc --swagger api.proto

该命令将生成对应的swagger.json文件,可用于swagger工具通过WEBUI的方式打开使用,可运行命令如下:

  1. kratos tool swagger serve api/api.swagger.json

扩展阅读

bm快速开始
bm模块说明
bm中间件