这个开源项目就是:go-gin-api
,目前 800+ Star。git
go-gin-api
是基于 Gin 进行模块化设计的 API 框架,封装了经常使用的功能,使用简单,致力于进行快速的业务研发,同时增长了更多限制,约束项目组开发成员,规避混乱无序及自由随意的编码。github
$ git clone https://github.com/xinliangnote/go-gin-api $ cd go-gin-api $ go run main.go -env fat // -env fat 设置为测试环境
首先进入到服务初始化界面。web
接下来填写 MySQL
、Redis
配置信息,填写完成后,点击初始化按钮。redis
如上图所示,表示服务初始化成功,须要再从新启动服务,服务启动后就会看到登陆界面。算法
使用默认用户信息: admin
,admin
登陆便可,登陆成功后就会看到仪表盘界面。数据库
在后台可配置邮件发件人信息,以下图所示:json
邮件模板以下:api
在后台可设置调用方 KEY、调用方 SECRET、调用方对接人、备注等信息。跨域
将建立的调用方的 KEY、SECRET 发给调用方便可,能够对调用方进行 启用/禁用/删除 等操做,还能够对其受权可访问的接口。cors
接口鉴权是基于 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 便可查看。
项目中使用 gqlgen
实现了 GraphQL 查询,会发现与 gqlgen init 初始化的 demo 不一样,是由于代码已经集成到 go-gin-api 中,好比集成了项目 core 包中的 链路、日志 等。
目前仅实现了 Demo, resolver 使用的是模拟数据,不过使用可复用的 service 也已经实现了,在代码已注释,感兴趣的能够深刻研究。
启动 Prometheus
的配置文件,可参考:
相似效果:
Loki
是一个水平可扩展,高可用性,多租户的日志聚合系统,有兴趣能够研究一下。
启用 Loki
的配置文件,可参考:
https://github.com/xinliangno...
https://www.yuque.com/xinlian...
若是您有好的想法和建议,欢迎加好友交流。