在golang中处理api版本的idomatic方法是什么?
发布时间:2020-12-16 19:26:26 所属栏目:大数据 来源:网络整理
导读:我正在Golang中创建一个用于移动应用程序的服务器.如果用户不更新应用程序,我需要能够支持多个版本的API.版本控制的主要问题是以正确的格式返回移动应用程序版本的数据. 我已经看到有三种基本方法可以做到这一点. A.一种方法是在“/”上设置一个路由处理程序
我正在Golang中创建一个用于移动应用程序的服务器.如果用户不更新应用程序,我需要能够支持多个版本的API.版本控制的主要问题是以正确的格式返回移动应用程序版本的数据.
我已经看到有三种基本方法可以做到这一点. func main() { http.HandleFunc("/",routes.ParseFullURI) } B.使用像gorilla / mux这样的库来处理路由器中的模式,但是我看到了一些warnings that this can be too slow. func main() { mux.HandleFunc("{version:}/",routes.ParseVersionForHome) mux.HandleFunc("{version:}/getData",routes.ParseVersionForGetDAta) mux.HandleFunc("{version:}/otherCall",routes.ParseVersionForOtherCall) } C.让个别网址不会更改,但会根据标题分成不同的版本. func main() { http.HandleFunc("/",routes.ParseHeaderForVersionForHome) http.HandleFunc("/getData",routes.ParseHeaderForVersionForGetData) http.HandleFunc("/otherCall",routes.ParseHeaderForVersionForOtherCall) } 我担心选项1代码太乱了.我担心选项2的性能会太慢,我担心选项3对于客户来说很难处理,或者由于版本没有明确标记而会让人感到困惑. 哪种方法最适合Golang,并且会为经常轮询的移动应用带来最佳性能?
有许多路由框架允许分组,例如使用echo(如果你想要速度,这是一个非常好的框架)
package main import "github.com/labstack/echo" func ping(c *echo.Context) { c.String(200,"pong") } func main() { e := echo.New() v1 := e.Group("/v1") v1.Get("/ping",ping) v2 := e.Group("/v2") v2.Get("/ping",ping) e.Run(":4444") } 我觉得这很干净. 我相信很多其他框架都允许这样做.我知道马提尼的事实,但这不是一个惯用的框架…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |