Heim  >  Artikel  >  Backend-Entwicklung  >  Gins Fizz OpenAPi-Generator benennt Typen um

Gins Fizz OpenAPi-Generator benennt Typen um

WBOY
WBOYnach vorne
2024-02-08 20:54:16741Durchsuche

Gin 的 Fizz OpenAPi 生成器正在重命名类型

Frageninhalt

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?


Richtige Antwort


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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen