2017-02-21 116 views
0

我目前正在使用Go +杜松子酒开发API。如何添加多个组到杜松子酒路由为api版本继承?

的API应该包括一个版本字符串,例如串V1

http://127.0.0.1:3000/v1/user/get_username 

也就是没有问题的,因为我可以创建一个组,杜松子酒

v1 := router.Group("/v1") 
v1.GET("/user/get_username", modules.UserGetUsername) 

但是......如果我开始一个新的API版本“v2”,并且功能UserGetUsername内的代码没有改变我必须做以下操作

v1 := router.Group("/v1") 
v1.GET("/user/get_username", modules.UserGetUsername) 
v2 := router.Group("/v2") 
v2.GET("/user/get_username", modules.UserGetUsername) 

是否有更好的解决方案 - 可能是这样的:

v1_v2 := router.Group("/v1").AnotherGroup("/v2") 
v1_v2.GET("/user/get_username", modules.UserGetUsername) 

谢谢您的建议。

+0

你可以采取另一种方法:只包括在特定的API版本的功能,如果它是全新的还是它的行为从以前的版本改变。 –

回答

1

我不认为杜松子提供这个,但看起来很容易写。

type GroupGroup struct { 
    groups []*gin.RouterGroup 
} 

func NewGroupGroup(groups []*gin.RouterGroup) GroupGroup { 
    return GroupGroup { 
     groups, 
    } 
} 

func (g *GroupGroup) handle(method string, path string, handler gin.HandlerFunc) { 
    for _, group := range g.groups { 
     group.Handle(method, path, handler) 
    } 
} 

然后,你可以用它像这样:

v1 := router.Group("/v1") 
v2 := router.Group("/v2") 

g := NewGroupGroup([]*gin.RouterGroup { v1, v2 }) 

g.handle(http.MethodGet, "hello", sayHello) 
g.handle(http.MethodPost, "goodbye", sayGoodbye) 
+0

非常感谢 - 这是一个非常好的解决方案! – Berti92

相关问题