這個開源項目就是: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...
若是您有好的想法和建議,歡迎加好友交流。