Grupy Echo nie działają z kodem, wygenerowane OpenAPI z wykorzystaniem oapi-codegen

0

Pytanie

Używam oapi-codegen do generowania swojego kodu po stronie serwera i Echo Labstack jako serwer. Gdy przechodzę obok Group przykład dla Openapi.RegisterHandlers zamiast Echo na przykład, zawsze pojawia się błąd 400 z {"message":"no matching operation was found"} dla każdego zapytania w tej grupie:

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

Jeśli wyślij zapytanie /api/foogdzie foo jest ostatecznym punktem API, określonej w generowanych kodzie serwera, pojawia się błąd: 400. Jeśli to zrobię /api/<some undefined api> Ja też dostaję 400. Jeśli wyślę zapytanie na /bazDostaję 404, zgodnie z oczekiwaniami, ponieważ to nie jest konkretną trasę. Jeśli nie przekażę prefiks w Group(), pojawia się błąd: 400 dla każdego żądania. Mam takie samo zachowanie, jeśli używam RegisterHandlersWithBaseURL()

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

Najlepsza odpowiedź

0

Wydaje się, że istnieje błąd, kiedy, jeśli podasz podstawowy sposób, albo do Group() funkcji lub RegisterHandlersWithBaseURL()wOapiRequestValidator middle ignoruje podstawowy sposób podczas sprawdzania drodze zapytania na trasach. Wykorzystuje trasy, określone w specyfikacji OpenAPI, bez podstawowego drodze. Aby obejść ten problem, skopiowałem inline.tmpl szablon i włamał się do GetSwagger() funkcja do włączenia tego w dolnej części:

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
}

Klucz w Path mapa-jest to trasa. Ja po prostu dodaję podstawowy sposób do każdego klucza.

2021-11-30 04:00:22

W innych językach

Ta strona jest w innych językach

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