Echo Grupuri nu funcționează cu OpenAPI codul generat folosind oapi-codegen

0

Problema

Eu sunt, folosind oapi-codegen pentru a genera meu server de cod și Echo Labstack ca server. Când trec pe lângă o Group exemplu să Openapi.RegisterHandlers în loc de un Echo de exemplu, am întotdeauna o eroare 400 cu {"message":"no matching operation was found"} pentru orice solicitare în acest grup:

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

Dacă trimiteți cererea /api/foo, în cazul în care foo este un API final definit în generat codul de server, primesc o eroare 400. Dacă am face /api/<some undefined api> Am obține, de asemenea, 400. Dacă am trimite o cerere pentru /bazAm 404 cum era de așteptat, din moment ce nu este o rută definită. Dacă nu trece un prefix Group(), Primesc o eroare 400 pentru fiecare cerere. Am obține același comportament, dacă am folosi RegisterHandlersWithBaseURL()

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

Cel mai bun răspuns

0

Se pare că există un bug în cazul în care dacă specificați o bază cale, fie la Group() funcție sau de a RegisterHandlersWithBaseURL(), laOapiRequestValidator mijlocul ignoră cale de bază atunci când verificarea calea cerere împotriva rute. Acesta utilizează rutele definite în OpenAPI spec fără cale de bază. Pentru a rezolva acest lucru, am suprascris inline.tmpl șablon și tocat GetSwagger() funcție pentru a include acest lucru în partea de jos:

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
}

Cheia în Path harta traseului. Am adăuga cale de bază pentru fiecare cheie.

2021-11-30 04:00:22

În alte limbi

Această pagină este în alte limbi

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