es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los Grupos Echo no funcionan con el código generado por OpenAPI utilizando oapi-codegen.

Estoy utilizando oapi-codegen para generar el código de mi servidor y Echo Labstack como servidor. Cuando paso una instancia de Group a Openapi.RegisterHandlers en lugar de una instancia de Echo, siempre obtengo 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)
    }

Utilizo el middleware de validación de Oapi para verificar todas las solicitudes contra el esquema OpenAPI.

g := e.Group("/api", middleware.OapiRequestValidator(swagger))
Openapi.RegisterHandlers(g, &MyApi{})

Si envío una solicitud /api/foo, donde foo es un punto de extremo de API definido en el código de servidor generado, obtengo un error 400. Si envío una solicitud /api/<alguna API no definida> también obtengo un error 400. Si envío una solicitud para /baz, obtengo un 404 como se esperaba, ya que esa no es una ruta definida. Si no paso un prefijo a Group(), obtengo un error 400 para cada solicitud. Obtengo el mismo comportamiento si uso RegisterHandlersWithBaseURL().

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Problema al utilizar una instancia de Grupo en lugar de una instancia de Echo con oapi-codegen

    Cuando se utiliza oapi-codegen para generar código de servidor y Echo Labstack como servidor, pasar una instancia de Group al método Openapi.RegisterHandlers en lugar de una instancia de Echo resulta en un error 400 con {"message":"no matching operation was found"} para cualquier solicitud en ese grupo.

    Para resolver este problema, se recomienda pasar una instancia de Echo al método Openapi.RegisterHandlers en lugar de una instancia de Group. Al definir el middleware para OapiRequestValidator, utilice e.Group para definir el prefijo requerido para los endpoints de su API.

    Código de ejemplo:

    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.
    e := echo.New()
    g := e.Group("/api") // Defina aquí el prefijo de los endpoints de su API.
    g.Use(middleware.OapiRequestValidator(swagger))
    Openapi.RegisterHandlers(e, &MyApi{})
    

    Esto debería resolver el problema y permitirle utilizar oapi-codegen con Echo Labstack para servir los endpoints de su API.

Comments are closed.