commit
a4787d7455
2
.gitignore
vendored
2
.gitignore
vendored
@ -16,3 +16,5 @@ Thumbs.db
|
|||||||
|
|
||||||
#
|
#
|
||||||
.swagger-codegen
|
.swagger-codegen
|
||||||
|
swagtest
|
||||||
|
*.exe
|
@ -6,7 +6,6 @@ info(
|
|||||||
version: "type version here"
|
version: "type version here"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
|
||||||
//注册请求结构
|
//注册请求结构
|
||||||
@ -18,7 +17,8 @@ type (
|
|||||||
|
|
||||||
LoginReq {
|
LoginReq {
|
||||||
Username string `json:"username"` //测试
|
Username string `json:"username"` //测试
|
||||||
Password string `json:"password"`//测试2
|
Password string `json:"password"` //测试2
|
||||||
|
AppId string `header:"appId"` //APPID-TEST
|
||||||
}
|
}
|
||||||
UserInfoReq {
|
UserInfoReq {
|
||||||
Id string `path:"id"`
|
Id string `path:"id"`
|
||||||
|
@ -162,73 +162,13 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
|
|||||||
}
|
}
|
||||||
if defineStruct, ok := route.RequestType.(spec.DefineStruct); ok {
|
if defineStruct, ok := route.RequestType.(spec.DefineStruct); ok {
|
||||||
for _, member := range defineStruct.Members {
|
for _, member := range defineStruct.Members {
|
||||||
if member.Name == "" {
|
if hasHeaderParameters(member) {
|
||||||
memberDefineStruct, _ := member.Type.(spec.DefineStruct)
|
parameters = parseHeader(member, parameters)
|
||||||
for _, m := range memberDefineStruct.Members {
|
|
||||||
if strings.Contains(m.Tag, "header") {
|
|
||||||
tempKind := swaggerMapTypes[strings.Replace(m.Type.Name(), "[]", "", -1)]
|
|
||||||
ftype, format, ok := primitiveSchema(tempKind, m.Type.Name())
|
|
||||||
if !ok {
|
|
||||||
ftype = tempKind.String()
|
|
||||||
format = "UNKNOWN"
|
|
||||||
}
|
|
||||||
sp := swaggerParameterObject{In: "header", Type: ftype, Format: format}
|
|
||||||
|
|
||||||
for _, tag := range m.Tags() {
|
|
||||||
sp.Name = tag.Name
|
|
||||||
if len(tag.Options) == 0 {
|
|
||||||
sp.Required = true
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
required := true
|
|
||||||
for _, option := range tag.Options {
|
|
||||||
if strings.HasPrefix(option, optionsOption) {
|
|
||||||
segs := strings.SplitN(option, equalToken, 2)
|
|
||||||
if len(segs) == 2 {
|
|
||||||
sp.Enum = strings.Split(segs[1], optionSeparator)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.HasPrefix(option, rangeOption) {
|
|
||||||
segs := strings.SplitN(option, equalToken, 2)
|
|
||||||
if len(segs) == 2 {
|
|
||||||
min, max, ok := parseRangeOption(segs[1])
|
|
||||||
if ok {
|
|
||||||
sp.Schema.Minimum = min
|
|
||||||
sp.Schema.Maximum = max
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.HasPrefix(option, defaultOption) {
|
|
||||||
segs := strings.Split(option, equalToken)
|
|
||||||
if len(segs) == 2 {
|
|
||||||
sp.Default = segs[1]
|
|
||||||
}
|
|
||||||
} else if strings.HasPrefix(option, optionalOption) || strings.HasPrefix(option, omitemptyOption) {
|
|
||||||
required = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.HasPrefix(option, exampleOption) {
|
|
||||||
segs := strings.Split(option, equalToken)
|
|
||||||
if len(segs) == 2 {
|
|
||||||
sp.Example = segs[1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sp.Required = required
|
|
||||||
}
|
|
||||||
sp.Description = strings.TrimLeft(m.Comment, "//")
|
|
||||||
parameters = append(parameters, sp)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if strings.ToUpper(route.Method) == http.MethodGet {
|
if strings.ToUpper(route.Method) == http.MethodGet {
|
||||||
for _, member := range defineStruct.Members {
|
for _, member := range defineStruct.Members {
|
||||||
if strings.Contains(member.Tag, "path") {
|
if hasPathParameters(member) || hasHeaderParameters(member) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if embedStruct, isEmbed := member.Type.(spec.DefineStruct); isEmbed {
|
if embedStruct, isEmbed := member.Type.(spec.DefineStruct); isEmbed {
|
||||||
@ -483,7 +423,7 @@ func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.
|
|||||||
schema.Title = defineStruct.Name()
|
schema.Title = defineStruct.Name()
|
||||||
|
|
||||||
for _, member := range defineStruct.Members {
|
for _, member := range defineStruct.Members {
|
||||||
if hasPathParameters(member) {
|
if hasPathParameters(member) || hasHeaderParameters(member) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
kv := keyVal{Value: schemaOfField(member)}
|
kv := keyVal{Value: schemaOfField(member)}
|
||||||
@ -494,8 +434,7 @@ func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.
|
|||||||
if kv.Key == "" {
|
if kv.Key == "" {
|
||||||
memberStruct, _ := member.Type.(spec.DefineStruct)
|
memberStruct, _ := member.Type.(spec.DefineStruct)
|
||||||
for _, m := range memberStruct.Members {
|
for _, m := range memberStruct.Members {
|
||||||
|
if hasHeaderParameters(m) || hasPathParameters(m) {
|
||||||
if strings.Contains(m.Tag, "header") {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -560,6 +499,15 @@ func hasPathParameters(member spec.Member) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hasHeaderParameters(member spec.Member) bool {
|
||||||
|
for _, tag := range member.Tags() {
|
||||||
|
if tag.Key == "header" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func schemaOfField(member spec.Member) swaggerSchemaObject {
|
func schemaOfField(member spec.Member) swaggerSchemaObject {
|
||||||
ret := swaggerSchemaObject{}
|
ret := swaggerSchemaObject{}
|
||||||
|
|
||||||
@ -751,3 +699,73 @@ func contains(s []string, str string) bool {
|
|||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseHeader(m spec.Member, parameters []swaggerParameterObject) []swaggerParameterObject {
|
||||||
|
|
||||||
|
tempKind := swaggerMapTypes[strings.Replace(m.Type.Name(), "[]", "", -1)]
|
||||||
|
ftype, format, ok := primitiveSchema(tempKind, m.Type.Name())
|
||||||
|
if !ok {
|
||||||
|
ftype = tempKind.String()
|
||||||
|
format = "UNKNOWN"
|
||||||
|
}
|
||||||
|
sp := swaggerParameterObject{In: "header", Type: ftype, Format: format}
|
||||||
|
|
||||||
|
for _, tag := range m.Tags() {
|
||||||
|
sp.Name = tag.Name
|
||||||
|
if len(tag.Options) == 0 {
|
||||||
|
sp.Required = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
required := true
|
||||||
|
for _, option := range tag.Options {
|
||||||
|
if strings.HasPrefix(option, optionsOption) {
|
||||||
|
segs := strings.SplitN(option, equalToken, 2)
|
||||||
|
if len(segs) == 2 {
|
||||||
|
sp.Enum = strings.Split(segs[1], optionSeparator)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasPrefix(option, rangeOption) {
|
||||||
|
segs := strings.SplitN(option, equalToken, 2)
|
||||||
|
if len(segs) == 2 {
|
||||||
|
min, max, ok := parseRangeOption(segs[1])
|
||||||
|
if ok {
|
||||||
|
sp.Schema.Minimum = min
|
||||||
|
sp.Schema.Maximum = max
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasPrefix(option, defaultOption) {
|
||||||
|
segs := strings.Split(option, equalToken)
|
||||||
|
if len(segs) == 2 {
|
||||||
|
sp.Default = segs[1]
|
||||||
|
}
|
||||||
|
} else if strings.HasPrefix(option, optionalOption) || strings.HasPrefix(option, omitemptyOption) {
|
||||||
|
required = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasPrefix(option, exampleOption) {
|
||||||
|
segs := strings.Split(option, equalToken)
|
||||||
|
if len(segs) == 2 {
|
||||||
|
sp.Example = segs[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sp.Required = required
|
||||||
|
}
|
||||||
|
sp.Description = strings.TrimLeft(m.Comment, "//")
|
||||||
|
if m.Name == "" {
|
||||||
|
memberDefineStruct, ok := m.Type.(spec.DefineStruct)
|
||||||
|
if !ok {
|
||||||
|
return parameters
|
||||||
|
}
|
||||||
|
for _, cm := range memberDefineStruct.Members {
|
||||||
|
if hasHeaderParameters(cm) {
|
||||||
|
parameters = parseHeader(cm, parameters)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return append(parameters, sp)
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user