我正在使用Go语言创建一个服务器,用于移动应用。我需要支持多个API版本,以防用户不更新应用程序。版本控制的主要问题是为移动应用程序的版本返回正确格式的数据。
我发现有三种基本方法来实现这一点。 A. 一种方法是在“ /”上有一个路由处理程序,然后允许该函数解析URL进行版本控制。 例如:
我担心选项1的代码会太混乱。我担心选项2的性能会太慢,而我也担心选项3对客户来说会很难处理,或者由于版本没有明确标记而变得令人困惑。
哪种方法对于Go来说是最符合惯例的,并且将为经常轮询的移动应用程序带来最佳性能?
我发现有三种基本方法来实现这一点。 A. 一种方法是在“ /”上有一个路由处理程序,然后允许该函数解析URL进行版本控制。 例如:
func main() {
http.HandleFunc("/", routes.ParseFullURI)
}
B. 使用诸如gorilla/mux之类的库来处理路由器中的模式,但我看到一些警告称这可能会太慢。
示例:
func main() {
mux.HandleFunc("{version:}/", routes.ParseVersionForHome)
mux.HandleFunc("{version:}/getData", routes.ParseVersionForGetDAta)
mux.HandleFunc("{version:}/otherCall", routes.ParseVersionForOtherCall)
}
C. 拥有不变的个别URL,但根据标头分成不同版本。
func main() {
http.HandleFunc("/", routes.ParseHeaderForVersionForHome)
http.HandleFunc("/getData", routes.ParseHeaderForVersionForGetData)
http.HandleFunc("/otherCall", routes.ParseHeaderForVersionForOtherCall)
}
我担心选项1的代码会太混乱。我担心选项2的性能会太慢,而我也担心选项3对客户来说会很难处理,或者由于版本没有明确标记而变得令人困惑。
哪种方法对于Go来说是最符合惯例的,并且将为经常轮询的移动应用程序带来最佳性能?
http://example.com/api/v1/…
这样的东西很常见。或者你更想知道如何在Go服务器中实现这样的模式? - Dave C