这个开源项目就是:go-gin-api ,目前 800+ Star。
go-gin-api 是基于 Gin 进行模块化设计的 API 框架,封装了常用的功能,使用简单,致力于进行快速的业务研发,同时增加了更多限制,约束项目组开发成员,规避混乱无序及自由随意的编码。
下载后可直接运行
$ git clone https://github.com/xinliangnote/go-gin-api$ cd go-gin-api$ go run main.go -env fat // -env fat 设置为测试环境
首先进入到服务初始化界面。
接下来填写 MySQL、Redis 配置信息,填写完成后,点击初始化按钮。
如上图所示,表示服务初始化成功,需要再重新启动服务,服务启动后就会看到登录界面。
使用默认用户信息:admin,admin 登录即可,登录成功后就会看到仪表盘界面。
已集成哪些功能?
Panic 时邮件告警通知
在后台可配置邮件发件人信息,如下图所示:
邮件模板如下:
接口鉴权
在后台可设置调用方 KEY、调用方 SECRET、调用方对接人、备注等信息。
将创建的调用方的 KEY、SECRET 发给调用方即可,可以对调用方进行 启用/禁用/删除 等操作,还可以对其授权可访问的接口。
接口鉴权是基于 HTTP Header 中的两个参数 Authorization、Authorization-Date 存储签名信息,代码中提供了 3 种语言的加密算法:Go、PHP、JS。
代码生成工具
gormgen,基于数据表生成三个文件,以 admin 表为例会生成:gen_table.md 表注释的 MD 文档、gen_model.go 表字段的结构体、gen_admin.go 表 CURD 操作代码。
意义:在进行业务需求开发时,创建完数据表后,执行代码生成工具,常用的 CURD 操作全部生成完毕,使用的时候只需要 . 后面的方法即可,这样大大提高了业务开发效率。
handlergen,基于定义的 Handler 文件中 type interface{} 中接口方法,进行生成文件。
例如,定义的方法为:
// Login 管理员登录// @Tags API.admin// @Router /api/admin/login [post]Login() core.HandlerFunc
生成后的方法为:
type loginRequest struct { }type loginResponse struct { }// Login 管理员登录// @Summary 管理员登录// @Description 管理员登录// @Tags API.admin// @Accept multipart/form-data// @Produce json// @Success 200 {object} loginResponse// @Failure 400 {object} code.Failure// @Router /api/admin/login [post]func (h *handler) Login() core.HandlerFunc { return func(c core.Context) { }}
意义:本次需求的研发负责人通过定义 type interface{} 的方式,定义出需要开发的方法,执行代码生成工具,每个方法的空实现都会生成在一个单独的文件中,开发人员只需去实现各自方法即可,便于进行分工和代码管理。
接口日志
通过 链路 ID 可以将 请求信息、响应信息、调用第三方 HTTP 接口的信息、调用第三方 gRPC 接口的信息、调试信息、执行的 SQL 信息、执行的 Redis 信息 串起来,记录到日志中。
点击某一行可查看日志详情。
接口文档
通过 handlergen 生成的代码,自带接口文档。
接口指标
项目中使用 prometheus 进行指标收集,项目中默认开启 metrics 记录,可以通过 http://127.0.0.1:9999/metrics 即可查看。
GraphQL
项目中使用 gqlgen 实现了 GraphQL 查询,会发现与 gqlgen init 初始化的 demo 不同,是因为代码已经集成到 go-gin-api 中,比如集成了项目 core 包中的 链路、日志 等。
目前仅实现了 Demo, resolver 使用的是模拟数据,不过使用可复用的 service 也已经实现了,在代码已注释,感兴趣的可以深入研究。
Prometheus
启动 Prometheus 的配置文件,可参考:
-
./deploy/prometheus/prometheus.yml
类似效果:
Loki
Loki 是一个水平可扩展,高可用性,多租户的日志聚合系统,有兴趣可以研究一下。
启用 Loki 的配置文件,可参考:
-
./deploy/loki/loki.yaml
-
./deploy/loki/promtail.yaml
已使用哪些组件?
-
支持 rate 接口限流
-
支持 panic 异常时邮件通知
-
支持 cors 接口跨域
-
支持 Prometheus 指标记录
-
支持 Swagger 接口文档生成
-
支持 GraphQL 查询语言
-
支持 trace 项目内部链路追踪
-
支持 pprof 性能剖析
-
支持 jwt 接口鉴权
-
支持 errno 统一定义错误码
-
支持 zap 日志收集
-
支持 viper 配置文件解析
-
支持 gorm 数据库组件
-
支持 go-redis 组件
-
支持 RESTful API 返回值规范
-
支持 gormgen、handlergen 代码生成工具
-
支持 web 界面,使用的 Light Year Admin 模板
项目地址
源码地址
https://github.com/xinliangnote/go-gin-api
在线文档
https://www.yuque.com/xinliangnote/go-gin-api/ngc3x5
如果您有好的想法和建议,欢迎加好友交流。