Oapı-codegen kullanılarak oluşturulan OpenAPI koduyla çalışmayan yankı Grupları

0

Soru

Sunucu kodumu oluşturmak için oapı-codegen kullanıyorum ve sunucu olarak Echo Labstack kullanıyorum. A'yı geçtiğimde Group örnek için Openapi.RegisterHandlers yerine bir Echo örneğin, her zaman 400 hatası alıyorum {"message":"no matching operation was found"} bu gruptaki herhangi bir istek için:

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

İstek gönderirseniz /api/foo, nere foo oluşturulan sunucu kodunda tanımlanan bir API uç noktasıdır, 400 hatası alıyorum. Eğer yaparsam /api/<some undefined api> Ben de 400 alıyorum. Eğer bir istek gönderirsem /baz Beklendiği gibi 404 alıyorum, çünkü bu tanımlanmış bir rota değil. Eğer bir önek iletmezsem Group() Her istek için 400 hatası alıyorum. Kullanırsam aynı davranışı alırım RegisterHandlersWithBaseURL()

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

En iyi cevabı

0

A temel yolunu belirtirseniz, ya da bir hata var gibi görünüyor Group() işlev veya için RegisterHandlersWithBaseURL(), buOapiRequestValidator orta, istek yolunu yollara karşı kontrol ederken temel yolu yok sayar. Temel yol olmadan OpenAPI spesifikasyonunda tanımlanan yolları kullanır. Bu sorunu çözmek için, üzerine yazdım inline.tmpl şablon ve hacklendi GetSwagger() bunu en altına dahil etme işlevi:

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
}

İçindeki anahtar Path harita rotadır. Sadece her anahtara temel yolu ekliyorum.

2021-11-30 04:00:22

Diğer dillerde

Bu sayfa diğer dillerde

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