Echo Groups 不使用 OpenAPI 使用 oapi-codegen 生成的代码
Echo Groups not working with OpenAPI generated code using oapi-codegen
我正在使用 oapi-codegen 生成我的服务器代码,并使用 Echo Labstack 作为服务器。
当我将 Group
实例而不是 Echo
实例传递给 Openapi.RegisterHandlers
时,对于该组中的任何请求,我总是会收到 {"message":"no matching operation was found"}
的 400 错误:
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{})
如果发送请求 /api/foo
,其中 foo
是在生成的服务器代码中定义的 API 端点,我收到 400 错误。如果我这样做 /api/<some undefined api>
,我也会得到 400。如果我确实发送了 /baz
的请求,我会按预期得到 404,因为那不是定义的路由。如果我不将前缀传递给 Group()
,我会收到每个请求的 400 错误。如果我使用 RegisterHandlersWithBaseURL()
,我会得到相同的行为
似乎有一个错误,如果您指定基本路径,无论是 Group()
函数还是 RegisterHandlersWithBaseURL()
,OapiRequestValidator
中间在检查时都会忽略基本路径针对路由的请求路径。它使用没有基本路径的 OpenAPI 规范中定义的路由。为了解决这个问题,我重写了 inline.tmpl
模板并修改了 GetSwagger()
函数以将其包含在底部:
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
}
Path
地图中的关键是路线。我只是将基本路径附加到每个键。
我正在使用 oapi-codegen 生成我的服务器代码,并使用 Echo Labstack 作为服务器。
当我将 Group
实例而不是 Echo
实例传递给 Openapi.RegisterHandlers
时,对于该组中的任何请求,我总是会收到 {"message":"no matching operation was found"}
的 400 错误:
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{})
如果发送请求 /api/foo
,其中 foo
是在生成的服务器代码中定义的 API 端点,我收到 400 错误。如果我这样做 /api/<some undefined api>
,我也会得到 400。如果我确实发送了 /baz
的请求,我会按预期得到 404,因为那不是定义的路由。如果我不将前缀传递给 Group()
,我会收到每个请求的 400 错误。如果我使用 RegisterHandlersWithBaseURL()
似乎有一个错误,如果您指定基本路径,无论是 Group()
函数还是 RegisterHandlersWithBaseURL()
,OapiRequestValidator
中间在检查时都会忽略基本路径针对路由的请求路径。它使用没有基本路径的 OpenAPI 规范中定义的路由。为了解决这个问题,我重写了 inline.tmpl
模板并修改了 GetSwagger()
函数以将其包含在底部:
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
}
Path
地图中的关键是路线。我只是将基本路径附加到每个键。