【发布时间】:2021-08-24 16:28:44
【问题描述】:
我正在寻找一种简洁的方法来维护具有相同端点的 API 的两个版本。
现在,最简单但似乎过度的方法是拥有类似的东西
r := chi.NewRouter()
r.Get("/test", func(w http.ResponseWriter, r *http.Request) {
version := r.Header.Get("Accept-version")
if version == "v1" {
w.Write([]byte("version 1 of api"))
} else {
w.Write([]byte("other version of api"))
}
})
但是当你有几十个左右的端点时......可能会变得混乱
我想要的方式是拥有一个中间件,该中间件将通过下一个定义的路线。所以像
r := chi.NewRouter()
r.With(UseVersion1).Get("/test", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("version 1 of api"))
}
})
r.With(UseVersion2).Get("/test", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("other version of api"))
}
})
这甚至可能吗?或者有人可以建议一条更好的路线(双关语不是故意的)
编辑:我知道为路径添加前缀是一个可行的选择。我想避免这种情况
【问题讨论】:
-
在路径中添加版本前缀:
/v1/test和/v2/test。 -
我忘了说我不想给路径加前缀
-
alexmac 是对的 通常我们使用前缀,但是如果你不想添加前缀你可以使用中间件