Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjana Fizz OpenAPi Gin sedang menamakan semula jenis

Penjana Fizz OpenAPi Gin sedang menamakan semula jenis

WBOY
WBOYke hadapan
2024-02-08 20:54:16743semak imbas

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

Kandungan soalan

Saya mencipta api ringkas yang ditulis dalam gin. Saya menggunakan fizz untuk menjana spesifikasi openapi 3. Ini adalah titik akhir catatan saya:

// 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))
}

Ini kaedah penangannya:

// Creates new user
func CreateUser(c *gin.Context, register *models.Register) error {
    ...

    return nil
}

Masalahnya ialah dalam spesifikasi json yang dihasilkan, model "register" ditunjukkan sebagai "createuserinput":

Adakah cara untuk menyelesaikan masalah ini? Atau adakah ini normal?


Jawapan betul


Mengikut pelaksanaan, nama skema dijana oleh pernyataan berikut: name := strings.title(op.id) + "input" (请参见下面的 23 baris):

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      }

Anda boleh menggunakan fizz.id untuk menyesuaikan id operasi, tetapi tiada cara untuk mengalih keluar akhiran input. Jika anda benar-benar mahu menjana nama skema secara berbeza, anda perlu memotong repositori dan mengubah suai pelaksanaan.

Atas ialah kandungan terperinci Penjana Fizz OpenAPi Gin sedang menamakan semula jenis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam