Echo Skupiny nepracuje s OpenAPI vygenerovaný kód pomocou oapi-codegen

0

Otázka

Ja používam oapi-codegen generovať môj server kód a Echo Labstack ako server. Keď som sa prejsť Group stupňa Openapi.RegisterHandlers miesto Echo napríklad, vždy som si chybu 400 s {"message":"no matching operation was found"} pre každú žiadosť v tejto skupine:

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

Ak chcete odoslať žiadosť /api/footam , kde je foo je koncový bod rozhrania API definované v vygenerovaný kód servera, dostanem chybu 400. Ak som to /api/<some undefined api> Tiež som si 400. Ak mám poslať žiadosť o /bazSom si 404, ako sa očakávalo, pretože to nie je definovaný trasy. Ak nemám prejsť prefix Group()Som si chybu 400 pre každú požiadavku. Mám rovnaké správanie, ak môžem použiť RegisterHandlersWithBaseURL()

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

Najlepšiu odpoveď

0

Zdá sa, že je chyba, kde ak zadáte základnú cestu, buď Group() funkcie, alebo RegisterHandlersWithBaseURL()saOapiRequestValidator uprostred ignoruje základnú cestu pri kontrole žiadosti cestu proti trasy. Používa trasy definované v OpenAPI spec bez základnej cestu. Ak chcete obísť toto som overwrote na inline.tmpl šablóny a hacknut GetSwagger() funkcia zaradiť na spodnej:

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
}

Kľúčom v Path mapa trasy. Som len doplniť základňu, cesta na každé tlačidlo.

2021-11-30 04:00:22

V iných jazykoch

Táto stránka je v iných jazykoch

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