Ich habe eine einfache API erstellt, die in Gin geschrieben ist. Ich verwende Fizz, um die OpenAPI-3-Spezifikation zu generieren. Das ist mein Post-Endpunkt:
// sets user route group func userroute(grp *fizz.routergroup) { // create new user grp.post("", []fizz.operationoption{ fizz.summary("creates new user and sends verification mail."), ... }, tonic.handler(handlers.createuser, 201)) }
Dies ist die Handler-Methode:
// Creates new user func CreateUser(c *gin.Context, register *models.Register) error { ... return nil }
Das Problem besteht darin, dass in der generierten JSON-Spezifikation das Modell „register“ als „createuserinput“ angezeigt wird:
Gibt es eine Möglichkeit, dieses Problem zu lösen? Oder ist das normal?
Gemäß der Implementierung wird der Schemaname durch die folgende Anweisung generiert: name := strings.title(op.id) + "input"
(请参见下面的 23
Zeile):
1 // setOperationParams adds the fields of the struct type t 2 // to the given operation. 3 func (g *Generator) setOperationParams(op *Operation, t, parent reflect.Type, allowBody bool, path string) error { 4 if t.Kind() != reflect.Struct { 5 return errors.New("input type is not a struct") 6 } 7 if err := g.buildParamsRecursive(op, t, parent, allowBody); err != nil { 8 return err 9 } 10 // Input fields that are neither path- nor query-bound 11 // have been extracted into the operation's RequestBody 12 // If the RequestBody is not nil, give it a name and 13 // move it to the openapi spec's components/schemas section 14 // Replace the RequestBody's schema with a reference 15 // to the named schema in components/schemas 16 if op.RequestBody != nil { 17 mt := tonic.MediaType() 18 if mt == "" { 19 mt = anyMediaType 20 } 21 sch := op.RequestBody.Content[mt].Schema 22 if sch != nil { 23 name := strings.Title(op.ID) + "Input" 24 g.api.Components.Schemas[name] = sch 25 op.RequestBody.Content[mt].Schema = &SchemaOrRef{Reference: &Reference{ 26 Ref: componentsSchemaPath + name, 27 }} 28 } 29 }
Sie können fizz.id verwenden, um die Vorgangs-ID anzupassen, aber es gibt keine Möglichkeit, das Suffix input
zu entfernen. Wenn Sie Schemanamen wirklich anders generieren möchten, müssen Sie das Repository forken und die Implementierung ändern.
Das obige ist der detaillierte Inhalt vonGins Fizz OpenAPi-Generator benennt Typen um. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!