Eco Gruppi di lavoro con OpenAPI codice generato usando oapi-codegen

0

Domanda

Sto usando oapi-codegen per generare il mio codice del server e l'Eco Labstack come server. Quando mi passa un Group istanza di Openapi.RegisterHandlers invece di un Echo esempio, ricevo sempre un errore 400 con {"message":"no matching operation was found"} per qualsiasi richiesta in questo gruppo:

    swagger, err := Openapi.GetSwagger()
    if err != nil {
        fmt.Fprintf(os.Stderr, "Error loading swagger spec\n: %s", err)
        os.Exit(1)
    }

    // Use oapi validation middleware to check all requests against the
    // OpenAPI schema.
    g := e.Group("/api", middleware.OapiRequestValidator(swagger))
    Openapi.RegisterHandlers(g, &MyApi{})

Se invio la richiesta /api/foodove foo è un endpoint API definite nel generato il codice del server, ho un 400 errore. Se faccio /api/<some undefined api> Ho anche arrivare a 400. Se faccio inviare una richiesta di /baz, Ho 404 come previsto, dal momento che non è una rotta definita. Se non riesco a passare un prefisso Group()Ricevo un errore 400 per ogni richiesta. Ho lo stesso problema se uso RegisterHandlersWithBaseURL()

go go-echo openapi
2021-11-23 20:35:13
1

Migliore risposta

0

Sembra che ci sia un bug per cui se si specifica un percorso di base, sia per la Group() funzione o RegisterHandlersWithBaseURL()ilOapiRequestValidator medio ignora il percorso di base quando si verifica il percorso di richiesta con le route. Utilizza i percorsi definiti nel OpenAPI spec senza il percorso di base. Per ovviare a questo, ho sovrascritto il inline.tmpl modello e violato il GetSwagger() funzione per includere questo in fondo:

func GetSwagger(pathPrefix string) (swagger *openapi3.T, err error) {
...
    var updatedPaths openapi3.Paths = make(openapi3.Paths)

    for key, value := range(swagger.Paths) {
        updatedPaths[pathPrefix + key] = value
    }

    swagger.Paths = updatedPaths
}

La chiave nel Path la mappa è il percorso. Ho semplicemente aggiungere il percorso di base per ogni tasto.

2021-11-30 04:00:22

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................