Echo Grupos de no trabajar con la api abierto (openapi) código generado por el uso de la oapi-codegen

0

Pregunta

Estoy usando la oapi-codegen para generar mi código de servidor y de Echo Labstack como el servidor. Cuando me pase un Group instancia a Openapi.RegisterHandlers en lugar de una Echo ejemplo, siempre me sale un error 400 con {"message":"no matching operation was found"} para cualquier solicitud en ese 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{})

Si la solicitud de envío /api/foo, donde foo es un extremo de API definido en la genera el código del servidor, me sale un error 400. Si hago /api/<some undefined api> También tengo 400. Si me envía una solicitud de /baz, Me sale el error 404 como era de esperar, ya que no es una ruta definida. Si yo no pase de un prefijo Group(), Me sale un error 400 para cada solicitud. Me sale el mismo comportamiento si puedo usar RegisterHandlersWithBaseURL()

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

Mejor respuesta

0

Parece ser un bug donde si se especifica una ruta de acceso base, ya sea para la Group() función o a RegisterHandlersWithBaseURL()elOapiRequestValidator medio ignora la ruta de acceso base al comprobar la ruta de solicitud en contra de las rutas. Utiliza las rutas definidas en la especificación api abierto (openapi) sin la ruta de acceso base. Para evitar esto, yo sobrescribió la inline.tmpl plantilla y hackeado la GetSwagger() función para incluir esto en el fondo:

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
}

La clave en la Path mapa de la ruta. Acabo de anexar la ruta de acceso base a cada tecla.

2021-11-30 04:00:22

En otros idiomas

Esta página está en otros idiomas

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