diff --git a/common.go b/common.go new file mode 100644 index 0000000..edcde63 --- /dev/null +++ b/common.go @@ -0,0 +1,39 @@ +// Package api_doc ... +// +// Description : api_doc ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2024-12-24 10:52 +package api_doc + +import ( + "git.zhangdeman.cn/gateway/api-doc/define" + "git.zhangdeman.cn/zhangdeman/consts" + "strings" +) + +// GetUriPathParamList 获取uri参数列表 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:52 2024/12/24 +func GetUriPathParamList(uriPath string) []*define.ParamConfig { + var ( + paramList []string + result = make([]*define.ParamConfig, 0) + ) + if paramList = define.UriParamRegexp.FindAllString(uriPath, -1); len(paramList) == 0 { + return result + } + for _, param := range paramList { + result = append(result, &define.ParamConfig{ + Location: consts.RequestDataLocationUriPath.String(), + Path: strings.TrimRight(strings.TrimLeft(param, "{"), "}"), + Type: consts.DataTypeString.String(), + Title: param, + Description: param, + }) + } + return result +} diff --git a/define/generate.go b/define/generate.go index a8a4770..ef576b1 100644 --- a/define/generate.go +++ b/define/generate.go @@ -7,15 +7,18 @@ // Date : 2024-08-14 15:20 package define +import "regexp" + // DocParseResult 文档解析结果 // // Author : go_developer@163.com<白茶清欢> // // Date : 10:30 2024/12/24 type DocParseResult struct { - Domain string `json:"domain"` // 域名 - Description string `json:"description"` // 描述 - UriList []string `json:"uri_list"` // 接口列表 + Domain string `json:"domain"` // 域名 + Title string `json:"title"` // 标题 + Description string `json:"description"` // 描述 + UriList []*UriBaseConfig `json:"uri_list"` // 接口列表 } // UriBaseConfig 添加接口时的基础配置 @@ -59,3 +62,7 @@ type ResultConfig struct { Title string `json:"title"` // 返回值标题 Description string `json:"description"` // 返回值描述 } + +var ( + UriParamRegexp = regexp.MustCompile("({.*?})") // uri路径中参数提取的正则表达式 +) diff --git a/parser.go b/parser.go index fbfa0a6..327fe9f 100644 --- a/parser.go +++ b/parser.go @@ -8,7 +8,6 @@ package api_doc import ( - "errors" "git.zhangdeman.cn/gateway/api-doc/define" "git.zhangdeman.cn/zhangdeman/serialize" "github.com/tidwall/gjson" @@ -37,23 +36,6 @@ func Parse(docUrl string) (*define.DocParseResult, error) { return ParseSwagger2(docContent) } -// ParseSwagger2 解析swagger2.0版本文档 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 10:33 2024/12/24 -func ParseSwagger2(docContent []byte) (*define.DocParseResult, error) { - var ( - err error - swaggerDoc define.Swagger - ) - - if err = serialize.JSON.UnmarshalWithNumber(docContent, &swaggerDoc); nil != err { - return nil, errors.New("parse swagger json fail : " + err.Error()) - } - return nil, nil -} - func ParseOpenapi3(docContent []byte) (*define.DocParseResult, error) { return nil, nil } diff --git a/swagger.go b/swagger.go new file mode 100644 index 0000000..c5ecfaf --- /dev/null +++ b/swagger.go @@ -0,0 +1,51 @@ +// Package api_doc ... +// +// Description : api_doc ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2024-12-24 10:34 +package api_doc + +import ( + "errors" + "fmt" + "git.zhangdeman.cn/gateway/api-doc/define" + "git.zhangdeman.cn/zhangdeman/serialize" +) + +// ParseSwagger2 解析swagger2.0版本文档 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 10:33 2024/12/24 +func ParseSwagger2(docContent []byte) (*define.DocParseResult, error) { + var ( + err error + swaggerDoc define.Swagger + ) + + if err = serialize.JSON.UnmarshalWithNumber(docContent, &swaggerDoc); nil != err { + return nil, errors.New("parse swagger json fail : " + err.Error()) + } + docResult := &define.DocParseResult{ + Domain: swaggerDoc.Host, + Title: swaggerDoc.Info.Title, + Description: swaggerDoc.Info.Description, + UriList: make([]*define.UriBaseConfig, 0), + } + if docResult.UriList, err = buildUriList(&swaggerDoc); nil != err { + return nil, err + } + return docResult, nil +} + +// 解析uri列表 +func buildUriList(swaggerDoc *define.Swagger) ([]*define.UriBaseConfig, error) { + uriList := make([]*define.UriBaseConfig, 0) + for itemUri, itemUriMethodConfig := range swaggerDoc.Paths { + GetUriPathParamList(itemUri) + fmt.Println(itemUriMethodConfig) + } + return uriList, nil +}