Echo Skupin nefunguje s OpenAPI vygenerovaný kód pomocí oapi-codegen

0

Otázka

Já používám oapi-codegen generovat můj kód serveru a Echo Labstack jako server. Když jsem se projít Group instance Openapi.RegisterHandlers místo Echo například, vždy jsem si 400 chybová s {"message":"no matching operation was found"} pro jakýkoliv požadavek v této skupině:

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

Pokud pošlete žádost /api/foo, kde foo je API koncový bod definované ve vygenerovaném kódu serveru, dostanu chybu 400. Když to udělám /api/<some undefined api> Také jsem si 400. Pokud mám poslat žádost o /bazDostanu 404 jak se dalo očekávat, protože to není definované trasy. Pokud nechci předat předponu Group()Dostanu 400 chyba pro každý požadavek. Mám stejné chování, pokud mohu použít RegisterHandlersWithBaseURL()

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

Nejlepší odpověď

0

Tam se zdá být chyba, kdy pokud zadáte základní cesty, a to buď na Group() funkce nebo RegisterHandlersWithBaseURL(), OapiRequestValidator střední ignoruje základní cestu, při kontrole žádosti cestu proti tras. Používá trasy definované v OpenAPI spec bez základny cestu. Chcete-li vyřešit tento, jsem se přepsal inline.tmpl šablony a naboural do GetSwagger() funkce zahrnují to na dně:

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
}

Klíč v Path mapa trasy. Jen jsem se připojit na základní cestu pro každý klíč.

2021-11-30 04:00:22

V jiných jazycích

Tato stránka je v jiných jazycích

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