基本介绍
基于微服务开发的工程目录采用统一的框架工程目录结构,具体请参考章节:工程目录设计
我们这里以项目 https://github.com/gogf/gf-demo-grpc 为例说明。
协议文件
协议文件定义到 manifest/protobuf
目录下。目录下的协议文件路径规则:模块名/版本号/xxx.proto
其中的版本号以v1/v2
类似形式管理,便于维护接口兼容性。
其中,涉及到数据表数据结构通过框架开发工具生成的protobuf
文件存放到 manifest/pbentity
目录下。
接口文件
通过proto
协议文件编译生成的接口文档存放到统一的api
目录下。
开发工具
生成数据表结构
我们可以通过 gf gen pbentity / make pbentity
命令自动根据数据库中的数据表结构生成对应的protobuf
协议文件。命令介绍请参考章节:数据表PB-gen pbentity
编译proto
协议文件
框架提供了 gf gen pb / make pb
命令自动编译proto
协议文件,并生成对应的接口文件以及控制器文件。
服务的启动
服务的启动控制仍然是通过cmd
目录来维护的,例如:https://github.com/gogf/gf-demo-grpc/blob/main/internal/cmd/cmd.go
接口的实现与注册
控制器用于proto
定义的接口的具体实现,控制器可以通过命令自动生成,并自动生成Register
方法,用于将具体实现注册到服务对象中。
注册方法:
启动注册:
标签注入与数据校验
标签自动注入
使用 gf gen pb/make pb
命令进行proto
文件编译时,支持自动的标签注入。只需要通过注释的形式写到proto
文件中,这些注释将会自动作为dc
标签嵌入到结构体属性中。如果注释规则形如 xxx:yyy
,那么将会自动生成xxx
的标签。例如:
需要注意,在GRPC
协议中,由于输入输出均是采用结构体形式,因此无法实现像HTTP
服务那样的默认值特性。
数据校验插件
数据校验插件将会根据标签中设置的规则对请求进行自动校验,需要在服务端通过拦截器的形式手动引入: