这个开源我的项目就是: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 设置为测试环境

首先进入到服务初始化界面。

接下来填写 MySQLRedis 配置信息,填写实现后,点击初始化按钮。

如上图所示,示意服务初始化胜利,须要再重新启动服务,服务启动后就会看到登录界面。

应用默认用户信息: adminadmin 登录即可,登录胜利后就会看到仪表盘界面。

已集成哪些性能?

Panic 时邮件告警告诉

在后盾可配置邮件发件人信息,如下图所示:

邮件模板如下:

接口鉴权

在后盾可设置调用方 KEY、调用方 SECRET、调用方对接人、备注等信息。

将创立的调用方的 KEY、SECRET 发给调用方即可,能够对调用方进行 启用/禁用/删除 等操作,还能够对其受权可拜访的接口。

接口鉴权是基于 HTTP Header 中的两个参数 AuthorizationAuthorization-Date 存储签名信息,代码中提供了 3 种语言的加密算法:GoPHPJS

代码生成工具

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/xinliangno...

在线文档

https://www.yuque.com/xinlian...

如果您有好的想法和倡议,欢送加好友交换。