Avi*_*vik 7 versioning routes go
我正在Golang中创建一个用于移动应用程序的服务器.我需要能够为用户不更新应用程序的情况支持多个版本的API.版本控制的主要问题是以正确的格式返回移动应用程序版本的数据.
我已经看到有三种基本方法可以做到这一点.
A.一种方法是在"/"上设置一个路由处理程序,然后允许该函数解析用于版本控制的URL.
例:
func main() {
http.HandleFunc("/", routes.ParseFullURI)
}
Run Code Online (Sandbox Code Playgroud)
B.使用诸如gorilla/mux之类的库来处理路由器中的模式,但我看到一些警告说这可能太慢了.
例:
func main() {
mux.HandleFunc("{version:}/", routes.ParseVersionForHome)
mux.HandleFunc("{version:}/getData", routes.ParseVersionForGetDAta)
mux.HandleFunc("{version:}/otherCall", routes.ParseVersionForOtherCall)
}
Run Code Online (Sandbox Code Playgroud)
C.让个别网址不改变,但基于标题,分成不同的版本.例:
func main() {
http.HandleFunc("/", routes.ParseHeaderForVersionForHome)
http.HandleFunc("/getData", routes.ParseHeaderForVersionForGetData)
http.HandleFunc("/otherCall", routes.ParseHeaderForVersionForOtherCall)
}
Run Code Online (Sandbox Code Playgroud)
我担心选项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")
}
Run Code Online (Sandbox Code Playgroud)
我觉得这很干净.
我相信很多其他框架都允许这样做.我知道马丁尼的事实,但这不是一个惯用的框架......
| 归档时间: |
|
| 查看次数: |
4144 次 |
| 最近记录: |