Gin 如何使用 Gin 做 API 版本控制?

xfstart07 · 2018年03月28日 · 最后由 keepeye 回复于 2018年03月29日 · 764 次阅读

请教一个问题,用 Gin 做 API ,如何做 API 的版本控制呢,目前知道的一种方式是通过 router 控制,router.Group("/v1")

routerv1 := router.Group("/v1")
articleHandler := v1.ArticleHandler{}
routerv1.GET("/articles", articleHandler.Index)

routerv2 := router.Group("/v2")
articleHandler2 := v2.ArticleHandler{}
routerv2.GET("/articles", articleHandler2.Index)

但是想实现 header accept 来控制版本,对外统一一个路径例如 “/articles”,不知道没有好的实现方式?

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

目前卡在一个点上,我的想法是通过 middleware 的方式,在请求进来的时候判断 accept 是什么版本,然后对应去执行相应版本的 Handler,目前卡在如何在 middleware 中如何去选择 Handler。

已经解决问题,采用的思路是,使用 middleware 读取 header accept 的版本,然后在 router handler 中判断 version 再做一次版本 handler 的分发。

r.GET("/login",v("2.0",v2.login),v("1.0",v1.login))
func v(version string, handler) gin.HandlerFunc {
    return func(c *gin.Context) {
        //判断版本号...
        if 版本不匹配 { 
            c.Next()
        } else {
            handler(c)
        }
    }
}

不知这样可否?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册