You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
kratos/doc/wiki-cn/blademaster-pb.md

2.7 KiB

介绍

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

kratos工具说明

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

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

proto文件说明

请注意想要生成bm代码,需要特别在protoservice内指定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 interfaceRegisterDemoBMServer,其中:

  • DemoBMServer接口,包含proto文件内配置了google.api.http选项的所有方法
  • RegisterDemoBMServer方法提供注册DemoBMServer接口的实现对象,和bmEngine用于注册路由
  • 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