2017-02-21 3 views
0

현재 Go + Gin API를 사용 중입니다.API 버전 상속을 위해 진 라우팅에 여러 그룹을 추가하는 방법은 무엇입니까?

내가 진

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

로 그룹을 만들하지만 수 있기 때문에 문제가 있다면 ...,없는 버전 문자열, 예를 들어 캐릭터 라인 (V1)

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

을 포함해야하는 API I 새로운 API 버전 "v2"를 시작하고 함수 UserGetUsername 내의 코드가 변경되지 않았습니다. 다음을 수행해야합니다.

거기에 더 좋은 솔루션이 있습니까? 그럴 수도 있습니다.

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

감사합니다.

+0

취할 수있는 또 다른 방법을 : 그것은 새로운 또는 그 동작은 이전 버전에서 변경된 경우에만 특정 API 버전의 기능을 포함 . –

답변

1

나는 Gin이 제공하지 않는다고 생각하지만 작성하기가 쉽습니다.

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