基本介绍

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

我们这里以项目 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服务那样的默认值特性。

数据校验插件

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








Content Menu

  • No labels

4 Comments

  1. 为什么不把proto定义文件放到api目录下呢

      • grpc 微服务开发下api目录下的代码都是自动生成的,生成代码和维护代码需要分开。
      • proto文件也是属于部署、交付内容之一,因此放到manifest下面也可以。
  2. 这个校验设置了,但是怎么没用

  3. enums要用的话应该怎么设置呢?