基本介绍

基于微服务开发的工程目录采用统一的框架工程目录结构,具体请参考章节: 工程目录设计🔥

我们这里以项目 https://github.com/gogf/gf-demo-grpc 为例说明。

协议文件

工程管理 - 图1协议文件定义到 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 方法,用于将具体实现注册到服务对象中。

注册方法:

工程管理 - 图2

启动注册:

工程管理 - 图3

标签注入与数据校验

标签自动注入

使用 gf gen pb/make pb 命令进行 proto 文件编译时,支持自动的标签注入。只需要通过注释的形式写到 proto 文件中,这些注释将会自动作为 dc 标签嵌入到结构体属性中。如果注释规则形如 xxx:yyy ,那么将会自动生成 xxx 的标签。例如:

工程管理 - 图4

工程管理 - 图5

需要注意,在 GRPC 协议中,由于输入输出均是采用结构体形式,因此无法实现像 HTTP 服务那样的默认值特性。

数据校验插件

数据校验插件将会根据标签中设置的规则对请求进行自动校验,需要在服务端通过拦截器的形式手动引入:

工程管理 - 图6