我正在寻找一种干净的方法来维护具有相同端点的 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"))
}
})
这甚至可能吗?或者有人可以建议一条更好的路线(双关语不是故意的)
编辑:我知道为路径添加前缀是一个可行的选择。我想避免这种情况