From 836f15f5d7e717c528d65c15dbc8c7a53f2c28c8 Mon Sep 17 00:00:00 2001 From: Liujian <824010343@qq.com> Date: Mon, 2 Sep 2024 11:24:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B7=AF=E7=94=B1=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=B2=A1=E6=9C=89=E8=BF=94=E5=9B=9E=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 11 +++++++++++ go.sum | 22 +++++++++++++++++++++ module/router/dto/output.go | 32 ++++++++++++++++-------------- module/router/iml.go | 39 +++++++++++++++++++++++-------------- service/api-doc/iml.go | 1 + service/api-doc/service.go | 27 +++++++++++++++---------- 6 files changed, 92 insertions(+), 40 deletions(-) diff --git a/go.mod b/go.mod index 937b7035..56f85aca 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,8 @@ require ( github.com/gabriel-vasile/mimetype v1.4.4 github.com/getkin/kin-openapi v0.127.0 github.com/gin-gonic/gin v1.10.0 + github.com/go-openapi/loads v0.22.0 + github.com/go-openapi/validate v0.24.0 github.com/google/uuid v1.6.0 github.com/influxdata/influxdb-client-go/v2 v2.14.0 github.com/urfave/cli/v2 v2.27.2 @@ -21,6 +23,7 @@ require ( require ( github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/bytedance/sonic v1.11.6 // indirect github.com/bytedance/sonic/loader v0.1.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -32,7 +35,12 @@ require ( github.com/ghodss/yaml v1.0.0 // indirect github.com/gin-contrib/gzip v1.0.1 // indirect github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-openapi/analysis v0.23.0 // indirect + github.com/go-openapi/errors v0.22.0 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/spec v0.21.0 // indirect + github.com/go-openapi/strfmt v0.23.0 // indirect github.com/go-openapi/swag v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect @@ -51,10 +59,12 @@ require ( github.com/leodido/go-urn v1.4.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/oapi-codegen/runtime v1.0.0 // indirect + github.com/oklog/ulid v1.3.1 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -64,6 +74,7 @@ require ( github.com/ugorji/go/codec v1.2.12 // indirect github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.13 // indirect + go.mongodb.org/mongo-driver v1.14.0 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.23.0 // indirect diff --git a/go.sum b/go.sum index 116af4e2..f105dc6a 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,8 @@ github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= @@ -45,10 +47,24 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= +github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= +github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= +github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w= +github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco= +github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs= +github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= +github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= +github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= +github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= +github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -99,6 +115,8 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -108,6 +126,8 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo= github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= @@ -145,6 +165,8 @@ github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 h1:+qGGcbkzsfDQNPPe github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913/go.mod h1:4aEEwZQutDLsQv2Deui4iYQ6DWTxR14g6m8Wv88+Xqk= go.etcd.io/etcd/client/pkg/v3 v3.5.13 h1:RVZSAnWWWiI5IrYAXjQorajncORbS0zI48LQlE2kQWg= go.etcd.io/etcd/client/pkg/v3 v3.5.13/go.mod h1:XxHT4u1qU12E2+po+UVPrEeL94Um6zL58ppuJWXSAB8= +go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= +go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= diff --git a/module/router/dto/output.go b/module/router/dto/output.go index 35765abb..53988c2b 100644 --- a/module/router/dto/output.go +++ b/module/router/dto/output.go @@ -10,28 +10,30 @@ import ( ) type Item struct { - Id string `json:"id"` - Name string `json:"name"` - Methods []string `json:"methods"` - Protocols []string `json:"protocols"` - Path string `json:"request_path"` - Creator auto.Label `json:"creator" aolabel:"user"` - Updater auto.Label `json:"updater" aolabel:"user"` - CreateTime auto.TimeLabel `json:"create_time"` - UpdateTime auto.TimeLabel `json:"update_time"` - CanDelete bool `json:"can_delete"` + Id string `json:"id"` + Methods []string `json:"methods"` + Protocols []string `json:"protocols"` + Path string `json:"request_path"` + Description string `json:"description"` + Disable bool `json:"disable"` + Creator auto.Label `json:"creator" aolabel:"user"` + Updater auto.Label `json:"updater" aolabel:"user"` + CreateTime auto.TimeLabel `json:"create_time"` + UpdateTime auto.TimeLabel `json:"update_time"` + CanDelete bool `json:"can_delete"` } type SimpleItem struct { - Id string `json:"id"` - Name string `json:"name"` - Method string `json:"method"` - Path string `json:"request_path"` + Id string `json:"id"` + Methods []string `json:"methods"` + Path string `json:"request_path"` } type Detail struct { SimpleDetail - Proxy *Proxy `json:"proxy"` + Proxy *Proxy `json:"proxy"` + Protocols []string `json:"protocols"` + Disable bool `json:"disable"` //Doc map[string]interface{} `json:"doc"` } diff --git a/module/router/iml.go b/module/router/iml.go index edb258b9..5479ac6a 100644 --- a/module/router/iml.go +++ b/module/router/iml.go @@ -98,7 +98,6 @@ func (i *imlRouterModule) SimpleList(ctx context.Context, serviceId string) ([]* out := utils.SliceToSlice(apiInfos, func(item *api.Info) *router_dto.SimpleItem { return &router_dto.SimpleItem{ Id: item.UUID, - Name: item.Name, Path: item.Path, } }) @@ -115,9 +114,15 @@ func (i *imlRouterModule) Detail(ctx context.Context, serviceId string, apiId st if err != nil { return nil, err } + protocols := []string{"HTTP", "HTTPS"} + if len(detail.Protocols) > 0 { + protocols = detail.Protocols + } apiDetail := &router_dto.Detail{ SimpleDetail: *router_dto.GenSimpleDetail(detail), + Protocols: protocols, + Disable: detail.Disable, } proxy, err := i.apiService.LatestProxy(ctx, apiId) if err != nil { @@ -168,17 +173,22 @@ func (i *imlRouterModule) Search(ctx context.Context, keyword string, serviceId return a.UpdateAt.After(b.UpdateAt) }) out := utils.SliceToSlice(apiInfos, func(item *api.Info) *router_dto.Item { + protocols := []string{"HTTP", "HTTPS"} + if len(item.Protocols) > 0 { + protocols = item.Protocols + } return &router_dto.Item{ - Id: item.UUID, - Name: item.Name, - Methods: item.Methods, - Protocols: item.Protocols, - Path: item.Path, - Creator: auto.UUID(item.Creator), - Updater: auto.UUID(item.Updater), - CreateTime: auto.TimeLabel(item.CreateAt), - UpdateTime: auto.TimeLabel(item.UpdateAt), - CanDelete: true, + Id: item.UUID, + Methods: item.Methods, + Protocols: protocols, + Path: item.Path, + Description: item.Description, + Disable: item.Disable, + Creator: auto.UUID(item.Creator), + Updater: auto.UUID(item.Updater), + CreateTime: auto.TimeLabel(item.CreateAt), + UpdateTime: auto.TimeLabel(item.UpdateAt), + CanDelete: true, } }) @@ -205,10 +215,9 @@ func (i *imlRouterModule) SimpleSearch(ctx context.Context, keyword string, serv } out := utils.SliceToSlice(apiInfos, func(item *api.Info) *router_dto.SimpleItem { return &router_dto.SimpleItem{ - Id: item.UUID, - Name: item.Name, - //Methods: item.Methods, - Path: item.Path, + Id: item.UUID, + Methods: item.Methods, + Path: item.Path, } }) return out, nil diff --git a/service/api-doc/iml.go b/service/api-doc/iml.go index 86e771cc..393f6754 100644 --- a/service/api-doc/iml.go +++ b/service/api-doc/iml.go @@ -99,6 +99,7 @@ func (i *imlAPIDocService) UpdateDoc(ctx context.Context, serviceId string, inpu } info.Updater = operator info.UpdateAt = time.Now() + info.Content = input.Content info.APICount = doc.APICount() return i.store.Save(ctx, info) } diff --git a/service/api-doc/service.go b/service/api-doc/service.go index 4bfcf336..cfd098e2 100644 --- a/service/api-doc/service.go +++ b/service/api-doc/service.go @@ -35,36 +35,43 @@ func init() { commit.InitCommitWithKeyService[DocCommit]("service", "api_doc") } +const ( + openAPIv3 = "v3" + openAPIv2 = "v2" +) + var ( - loader = openapi3.NewLoader() + openapi3Loader = openapi3.NewLoader() ) type DocLoader struct { - doc *openapi3.T + openAPI3Doc *openapi3.T + version string } func NewDocLoader(content string) (*DocLoader, error) { - doc, err := loader.LoadFromData([]byte(content)) + doc, err := openapi3Loader.LoadFromData([]byte(content)) if err != nil { - return nil, fmt.Errorf("load doc error:%v", err) + return nil, fmt.Errorf("load openAPI3Doc error:%v", err) } - return &DocLoader{doc: doc}, nil + + return &DocLoader{openAPI3Doc: doc}, nil } func (d *DocLoader) Valid() error { - if d.doc == nil { - return fmt.Errorf("doc is nil") + if d.openAPI3Doc == nil { + return fmt.Errorf("openAPI3Doc is nil") } - return d.doc.Validate(loader.Context) + return d.openAPI3Doc.Validate(openapi3Loader.Context) } func (d *DocLoader) APICount() int64 { - if d.doc == nil || d.doc.Paths == nil { + if d.openAPI3Doc == nil || d.openAPI3Doc.Paths == nil { return 0 } var count int64 - for _, item := range d.doc.Paths.Map() { + for _, item := range d.openAPI3Doc.Paths.Map() { if item.Get != nil { count++ }