diff --git a/router/define.go b/router/define.go index 4f00000..605f26e 100644 --- a/router/define.go +++ b/router/define.go @@ -63,9 +63,3 @@ type UriParam struct { const ( FieldNameMeta = "Meta" // 元信息字段 ) - -const ( - SwaggerUIThemeDefault = "swaggerUI" // 文档默认主题 - SwaggerUIThemeKnife4go = "knife4go" // knife4go 主题 - SwaggerUIThemeYDocLucky = "YDocLuckyUI" // YDoc Lucky UI 主题: https://github.com/NoBugBoy/LuckyUI -) diff --git a/router/server.go b/router/server.go index a5e967a..1b7b363 100644 --- a/router/server.go +++ b/router/server.go @@ -9,11 +9,10 @@ package router import ( "fmt" + apiDoc "git.zhangdeman.cn/gateway/api-doc" "net/http" "strings" - "git.zhangdeman.cn/zhangdeman/consts" - apiDocDefine "git.zhangdeman.cn/gateway/api-doc/define" "github.com/gin-gonic/gin" ) @@ -29,20 +28,20 @@ func NewServer(port int, option any) *server { } return &server{ router: gin.Default(), - docInstance: NewDoc(nil, []*apiDocDefine.ServerItem{ + uiInstance: apiDoc.NewSwaggerUI(nil, []*apiDocDefine.ServerItem{ { Url: fmt.Sprintf("http://127.0.0.1:%d", port), Description: "测试服务器", }, - }), // TODO : 配置相关信息 + }, apiDocDefine.SwaggerUIThemeYDocLucky), // TODO : 配置相关信息 port: port, } } type server struct { - router *gin.Engine - port int - docInstance *Doc + router *gin.Engine + port int + uiInstance *apiDoc.SwaggerUI } // Start 启动服务 @@ -68,7 +67,7 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL for _, c := range cList { urlTable := cParser.Parse(c) for _, itemUriCfg := range urlTable { - s.docInstance.Add(routerPrefix, itemUriCfg.FormDataType, itemUriCfg.ResultDataType) + _ = s.uiInstance.DocInstance().AddApiFromInAndOut(routerPrefix, itemUriCfg.FormDataType, itemUriCfg.ResultDataType) method := strings.ToUpper(itemUriCfg.RequestMethod) switch method { case http.MethodGet: @@ -93,47 +92,5 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL } } // 注册文档 - s.SwaggerUI() -} - -// SwaggerUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:45 2025/2/15 -func (s *server) SwaggerUI() { - swaggerInstance := NewSwaggerUI(s.docInstance, SwaggerUIThemeKnife4go) - s.router.GET("/swagger-resources", func(ctx *gin.Context) { // lucky UI获取分组信息 - ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") // 允许访问所有域 - ctx.JSON(http.StatusOK, []map[string]any{ - { - "name": "服务文档", - "url": "/swagger-ui/doc/openapi.json", - "swaggerVersion": consts.SwaggerDocVersion3, - }, - }) - // ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) - }) - s.router.GET("/swagger-ui/doc/openapi.json", func(ctx *gin.Context) { - ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") // 允许访问所有域 - ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) - }) - s.router.GET("/doc/swagger/*any", func(ctx *gin.Context) { - if ctx.Request.RequestURI == "/doc/swagger/doc.json" { - // 默认swagger, 通过此接口读取文档数据 - ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) - ctx.Abort() - } - if ctx.Request.RequestURI == "/doc/swagger/openapi.json" { - // knife4go 文档通过此接口读取文档列表 - ctx.JSON(http.StatusOK, []map[string]any{ - { - "name": "服务文档", - "url": "doc.json", - "swaggerVersion": consts.SwaggerDocVersion3, - }, - }) - ctx.Abort() - } - }, swaggerInstance.Handler()) + s.uiInstance.RegisterHandler(s.router, "/doc/swagger") } diff --git a/router/swagger_ui.go b/router/swagger_ui.go deleted file mode 100644 index ca0ed30..0000000 --- a/router/swagger_ui.go +++ /dev/null @@ -1,71 +0,0 @@ -// Package router ... -// -// Description : router ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 2025-02-15 21:20 -package router - -import ( - "github.com/gin-gonic/gin" - knife4goFiles "github.com/go-webtools/knife4go" - knife4goGin "github.com/go-webtools/knife4go/gin" - swaggerFiles "github.com/swaggo/files" - ginSwagger "github.com/swaggo/gin-swagger" -) - -// NewSwaggerUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:21 2025/2/15 -func NewSwaggerUI(docInstance *Doc, uiTheme string) *SwaggerUI { - return &SwaggerUI{ - docInstance: docInstance, - uiTheme: uiTheme, - } -} - -type SwaggerUI struct { - docInstance *Doc // 文档实例 - uiTheme string // 文档主题, swaggerUI / knife4go, 默认 knife4go -} - -// Handler 访问文档的接口处理 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:34 2025/2/15 -func (su *SwaggerUI) Handler() func(ctx *gin.Context) { - switch su.uiTheme { - case SwaggerUIThemeKnife4go: - return su.HandleKnife4goUI() - default: - return su.HandleSwaggerUI() - } -} - -// HandleKnife4goUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:38 2025/2/15 -func (su *SwaggerUI) HandleKnife4goUI() func(ctx *gin.Context) { - resetOption := func(cfg *knife4goGin.Config) { - if nil == cfg { - return - } - cfg.Title = "服务接口文档" - } - return knife4goGin.WrapHandler(knife4goFiles.Handler, resetOption) -} - -// HandleSwaggerUI ... -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 21:41 2025/2/15 -func (su *SwaggerUI) HandleSwaggerUI() func(ctx *gin.Context) { - return ginSwagger.WrapHandler(swaggerFiles.Handler) -}