Echo Grupos não trabalhar com a api aberto (openapi) código gerado usando oapi-codegen

0

Pergunta

Eu estou usando oapi-codegen para gerar o meu código de servidor de Eco Labstack como o servidor. Quando eu passo um Group instância Openapi.RegisterHandlers em vez de um Echo exemplo, eu sempre recebo um erro 400 com {"message":"no matching operation was found"} para qualquer solicitação nesse grupo:

    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 o pedido de envio /api/foo, onde foo é uma API ponto final definido no gerado o código do servidor, eu recebo um erro 400. Se eu fizer /api/<some undefined api> Também tenho 400. Se eu enviar um pedido de /baz, Eu recebo 404 conforme o esperado, uma vez que não é uma rota definida. Se eu não passar um prefixo para Group(), Eu recebo um erro 400 para cada solicitação. Eu recebo o mesmo comportamento se eu usar RegisterHandlersWithBaseURL()

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

Melhor resposta

0

Parece ser um bug onde, se você especificar um caminho de base, quer para o Group() função ou RegisterHandlersWithBaseURL()oOapiRequestValidator meio ignora o caminho de base ao verificar o pedido caminho contra as rotas. Ele usa as rotas definidas na api aberto (openapi) especificação sem a caminho de base. Para contornar esse problema, eu sobrescrevi o inline.tmpl modelo e cortado o GetSwagger() função para incluir este na parte inferior:

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
}

A chave na Path mapa da rota. Eu só acrescentar o caminho de base para cada chave.

2021-11-30 04:00:22

Em outros idiomas

Esta página está em outros idiomas

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