You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 14 Next »

该功能特性从v2.5版本开始提供。该命令目前仅支持HTTP接口开发,GRPC部分请参考gen pb命令。未来会考虑HTTPGRPC统一使用该命令生成控制器及SDK源代码。

基本介绍

解决痛点

在开发项目的时候,往往需要先根据业务需求和场景设计API接口,使用proto或者golang struct来设计API的输入和输出,随后再创建与API相对应的控制器实现,最后也有可能会提供SDK(同为Golang语言条件下)供内/外部服务调用。在开发过程中会遇到以下痛点:

  • 重复的代码工作较多。在API中创建输入输出定义文件后还需要在控制器目录下创建对应的文件、创建对应的控制器初始化代码、从API代码中反复拷贝各个输入输出结构名称,在这过程重复的操作比较多。
  • API与控制器之间的关联没有可靠规范约束。除了API有一定的命名约束外,控制器的创建和方法命名并没有约束,灵活度较高,API的结构名称与控制器方法名称难以约束对应,当接口越来越多时会有一定维护成本。
  • 团队开发多人协作时代码文件冲突概率大。多人开发协作都往一个文件执行变更时,出现文件冲突的概率就会变大,团队协作开发中处理这种文件冲突的精力开销是毫无意义的。
  • 缺少API的HTTP SDK自动生成工具。当开发完API后,往往需要立即给内部或者外部调用,缺少便捷的SDK生成,需要手动来维护这部分SDK代码,那么对于调用端来说成本非常高。

命令特性

  • 规范关联API定义与控制器文件命名、控制器实现方法命名。
  • 根据API定义自动生成控制器接口、控制器初始化文件及代码、接口初始化代码。
  • 根据API定义自动生成易于使用的HTTP SDK代码。
  • 支持自动化生成模式:当某个API结构定义文件发生变化时,自动增量化更新对应的控制器、SDK代码。

前置约定

重要的规范🔥

该命令的目的之一是规范化api代码的编写,那么我们应该有一些重要的规范需要了解(否则生成不了代码哦):

  • api层的接口定义文件路径需要满足/api/模块/版本/定义文件.go,例如:/api/user/v1/user.go/api/user/v1/user_delete.go、etc.
  • api定义的结构体名称需要满足操作Req及操作Res的命名方式。例如:GetReq/GetResGetListReq/GetListResDeleteReq/DeleteRes、etc.

以下是项目工程模板中的Hello接口示例:

建议性的命名

我们对一些常用的接口定义做了一些建议性的命名,供大家参考:

操作名称建议命名备注
查询列表GetListReq/Res通常是从数据库中分页查询数据记录
查询详情GetOneReq/Res通常接口需要传递主键条件,从数据库中查询记录详情
创建资源CreateReq/Res通常是往数据表中插入一条或多条数据记录
修改资源UpdateReq/Res通常是按照一定条件修改数据表中的一条或多条数据记录
删除资源DeleteReq/Res通常是按照一定条件删除数据表中的一条或多条数据记录

命令使用

该命令通过分析给定的api接口定义目录下的代码,自动生成对应的控制器/SDK Go代码文件。

手动模式

如果是手动执行命令行,直接在项目根目录下执行 gf gen ctrl 即可,她将完整扫描api接口定义目录,并生成对应代码。

$ gf gen ctrl -h
USAGE
    gf gen ctrl [OPTION]

OPTION
    -s, --srcFolder       source folder path to be parsed. default: api
    -d, --dstFolder       destination folder path storing automatically generated go files. default: internal/controller
    -w, --watchFile       used in file watcher, it re-generates go files only if given file is under srcFolder
    -k, --sdkPath         also generate SDK go files for api definitions to specified directory
    -v, --sdkStdVersion   use standard version prefix for generated sdk request path
    -n, --sdkNoV1         do not add version suffix for interface module name if version is v1
    -h, --help            more information about this command

EXAMPLE
    gf gen ctrl

如果使用框架推荐的项目工程脚手架,并且系统安装了make工具,也可以使用make ctrl快捷指令。

参数说明:

名称必须默认值含义
srcFolderapi指向api接口定义文件目录地址
dstFolderinternal/controller指向生成的控制器文件存放目录
watchFile

用在IDE的文件监控中,用于根据当文件发生变化时自动执行生成操作

sdkPath
如果需要生成HTTP SDK,该参数用于指定生成的SDK代码目录存放路径
sdkStdVersion

生成的HTTP SDK是否使用标准的版本管理。标准的版本管理将自动根据API版本增加请求的路由前缀。例如v1版本的API将会自动增加/api/v1的请求路由前缀。

sdksdkNoV1
生成的HTTP SDK中,当接口为v1版本时,接口模块名称是否不带V1后缀。

自动模式(推荐)

如果您是使用的GolandIDE,那么可以使用我们提供的配置文件:watchers.xml  自动监听代码文件修改时自动生成接口文件。使用方式,如下图:

使用示例

自动生成的接口定义文件

自动生成的控制器代码文件

自动生成的HTTP SDK代码文件


Content Menu

  • No labels