You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于OpenAPI Schema验证Go HTTP请求?求类似express-openapi-validator的包

适用于Go-chi的OpenAPI请求验证工具推荐

以下几个Go包可以满足你基于YAML格式OpenAPI规范验证HTTP请求的需求,无需为每个端点手动定义结构体,且能很好适配go-chi路由:

1. kin-openapi

这是Go生态中成熟度较高的OpenAPI 3.x工具库,提供完整的请求验证能力,可直接加载YAML格式的OpenAPI规范,自动校验请求的路径、参数、请求体等内容。

你可以通过其openapi3filter模块配合go-chi实现中间件验证,示例代码如下:

package main

import (
    "net/http"
    "github.com/getkin/kin-openapi/openapi3"
    "github.com/getkin/kin-openapi/openapi3filter"
    "github.com/getkin/kin-openapi/routers/chi"
    "github.com/go-chi/chi/v5"
)

func main() {
    // 加载本地OpenAPI YAML规范文件
    loader := openapi3.NewLoader()
    spec, err := loader.LoadFromFile("openapi.yaml")
    if err != nil {
        panic(err)
    }

    // 创建适配go-chi的路由解析器
    router, err := chi.NewRouter(spec)
    if err != nil {
        panic(err)
    }

    r := chi.NewRouter()
    // 注册OpenAPI验证中间件
    r.Use(func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
            // 匹配当前请求对应的OpenAPI接口定义
            route, pathParams, err := router.FindRoute(req)
            if err != nil {
                http.Error(w, err.Error(), http.StatusBadRequest)
                return
            }

            // 构建验证参数
            validationInput := &openapi3filter.RequestValidationInput{
                Request:    req,
                PathParams: pathParams,
                Route:      route,
            }

            // 执行请求验证
            if err := openapi3filter.ValidateRequest(req.Context(), validationInput); err != nil {
                http.Error(w, err.Error(), http.StatusBadRequest)
                return
            }

            next.ServeHTTP(w, req)
        })
    })

    // 注册业务路由端点
    r.Post("/api/users", func(w http.ResponseWriter, req *http.Request) {
        w.WriteHeader(http.StatusOK)
        w.Write([]byte("User created successfully"))
    })

    http.ListenAndServe(":8080", r)
}

2. go-openapi/validate

属于go-openapi生态组件,支持直接基于OpenAPI规范完成请求校验,无需手动生成结构体,可轻松封装为go-chi中间件使用,核心逻辑是依托规范文件完成请求与定义的匹配校验。

这些工具的工作模式和你熟悉的express-openapi-validator一致:直接加载YAML规范,自动匹配请求对应的API定义并完成全量校验,完全省去了为每个端点单独定义结构体的重复工作。

内容的提问来源于stack exchange,提问作者Alex K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:22:22