路由分组

路由分组用于给一批接口加统一前缀。

例如所有 v1 接口都以 /api/v1 开头:

api := router.Group("/api/v1")
{
	api.GET("/users", listUsers)
	api.POST("/users", createUser)
}

最终路径是:

GET /api/v1/users
POST /api/v1/users

一、为什么需要路由分组

没有分组时:

router.GET("/api/v1/users", listUsers)
router.POST("/api/v1/users", createUser)
router.GET("/api/v1/orders", listOrders)

有分组后:

api := router.Group("/api/v1")
{
	api.GET("/users", listUsers)
	api.POST("/users", createUser)
	api.GET("/orders", listOrders)
}

代码更短,也更容易统一加中间件。

二、给分组加中间件

例如后台接口都需要登录:

admin := router.Group("/admin")
admin.Use(AuthMiddleware())
{
	admin.GET("/profile", getProfile)
	admin.GET("/users", listUsers)
}

/admin/profile/admin/users 都会经过 AuthMiddleware

三、常见分组方式

func registerRoutes(router *gin.Engine) {
	router.GET("/health", health)

	api := router.Group("/api/v1")
	{
		api.GET("/users", listUsers)
		api.POST("/users", createUser)
	}

	admin := router.Group("/admin")
	admin.Use(AuthMiddleware())
	{
		admin.GET("/dashboard", dashboard)
	}
}

这样 main 函数会更干净:

func main() {
	router := gin.Default()
	registerRoutes(router)
	router.Run(":8080")
}

四、分组不要太深

不建议写成这样:

api := router.Group("/api")
v1 := api.Group("/v1")
admin := v1.Group("/admin")
user := admin.Group("/user")

层级太深会让路由难读。

多数项目保持两三层就够了:

/api/v1/users
/api/v1/orders
/admin/users