add blademaster-pb.md

pull/91/head
felixhao 6 years ago
parent c95fb17274
commit 7f6cf4f788
  1. 61
      doc/wiki-cn/blademaster-pb.md
  2. 6
      doc/wiki-cn/kratos-tool.md
  3. 2
      tool/kratos/project.go
  4. 2
      tool/protobuf/protoc-gen-bm/generator/generator.go

@ -0,0 +1,61 @@
# 介绍
基于proto文件可以快速生成`bm`框架对应的代码,提前需要准备以下工作:
* 安装`kratos tool protoc`工具,请看[kratos工具](kratos-tool.md)
* 编写`proto`文件,示例可参考[kratos-demon内proto文件](https://github.com/bilibili/kratos-demo/blob/master/api/api.proto)
# kratos工具说明
`kratos tool protoc`工具可以生成`warden` `bm` `swagger`对应的代码和文档,想要单独生成`bm`代码只需加上`--bm`如:
```shell
// generate BM HTTP
kratos tool protoc --bm api.proto
```
### proto文件说明
请注意想要生成`bm`代码,需要特别在`proto`的`service`内指定`google.api.http`配置,如下:
```proto
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目录](https://github.com/bilibili/kratos-demo/tree/master/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](https://github.com/bilibili/kratos-demo/blob/master/internal/server/http/server.go)内的如下代码:
```go
engine = bm.DefaultServer(hc.Server)
pb.RegisterDemoBMServer(engine, svc)
initRouter(engine)
```
`internal/service`内的`Service`结构实现了`DemoBMServer`接口可参考[kratos-demo内的service](https://github.com/bilibili/kratos-demo/blob/master/internal/service/service.go)内的如下代码:
```go
// 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
}
```

@ -94,7 +94,7 @@ kratos(已安装): Kratos工具集本体 Author(kratos) [2019/04/02]
### kratos tool protoc
```
```shell
// generate all
kratos tool protoc api.proto
// generate gRPC
@ -126,10 +126,12 @@ protoc -I$GOPATH/src:$KRATOS_HOME/tool/protobuf/pkg/extensions:$KRATOS_DEMO/api
大家也可以参考该命令进行`proto`生成,也可以参考[protobuf](https://github.com/google/protobuf)官方参数。
kratos tool swagger
### kratos tool swagger
```shell
kratos tool swagger serve api/api.swagger.json
```
执行命令后,浏览器会自动打开swagger文档地址。
同时也可以查看更多的 [go-swagger](https://github.com/go-swagger/go-swagger) 官方参数进行使用。

@ -51,7 +51,7 @@ var (
_tplTypeGomod: "/go.mod",
_tplTypeMain: "/cmd/main.go",
_tplTypeDao: "/internal/dao/dao.go",
_tplTypeHTTPServer: "/internal/server/http/http.go",
_tplTypeHTTPServer: "/internal/server/http/server.go",
_tplTypeService: "/internal/service/service.go",
_tplTypeModel: "/internal/model/model.go",
// init config

@ -91,7 +91,7 @@ func (t *bm) generateFileHeader(file *descriptor.FileDescriptorProto, pkgName st
// doc for the first file
t.P("/*")
t.P("Package ", t.GenPkgName, " is a generated blademaster stub package.")
t.P("This code was generated with kratos/tool/bmgen/protoc-gen-bm ", generator.Version, ".")
t.P("This code was generated with kratos/tool/protobuf/protoc-gen-bm ", generator.Version, ".")
t.P()
comment, err := t.Reg.FileComments(file)
if err == nil && comment.Leading != "" {

Loading…
Cancel
Save