いままでこんな書き方してたが冗長。
func (controller *ShopsController) Setup() { controller.Router.POST("/shops", controller.createShop) controller.Router.GET("/shops", controller.listShops) controller.Router.GET("/shops/:shop_id", controller.getShop) controller.Router.PUT("/shops/:shop_id", controller.updateShop) controller.Router.DELETE("/shops/:shop_id", controller.deleteShop) }
Martiniはこうかける GitHub - go-martini/martini: Classy web framework for Go
Grouping routes
func main() { router := gin.Default() // Simple group: v1 v1 := router.Group("/v1") { v1.POST("/login", loginEndpoint) v1.POST("/submit", submitEndpoint) v1.POST("/read", readEndpoint) } // Simple group: v2 v2 := router.Group("/v2") { v2.POST("/login", loginEndpoint) v2.POST("/submit", submitEndpoint) v2.POST("/read", readEndpoint) } router.Run(":8080") }
私の例は、https://github.com/dcu/gin-scaffold
を使ってるので、
以下のようになる。
controller.Router
を変数v1
に置き換えたような感じに。
func (controller *ShopsController) Setup() { v1 := controller.Router.Group("/shops") { v1.POST("", controller.createShop) v1.GET("", controller.listShops) v1.GET("/:shop_id", controller.getShop) v1.PUT("/:shop_id", controller.updateShop) v1.DELETE("/:shop_id", controller.deleteShop) } }
気をつけるのは、v1.GET("", controller.listShops)
これ。
/を入れてv1.GET("/", controller.listShops)
としてしまうと、
http://localhost:4000/shops
でなくhttp://localhost:4001/shops/
のように最後に/
が必要だし
色々なページのURLが変わってしまう。