4.1. 路由
简介
gin 框架创建简单路由方式很简单, 只需要三步即可:
router := gin.Default()
router.GET("/someGet", getting)
router.Run()
路由分包管理
但是项目中有成百上千条的路由都放在一起的话 那这绝对是一个很糟糕的事情; 所以 gin-pro
把路由模块分成一个app.go
核心文件和按照业务版本区分的业务路由包, 这样在业务路由包内就可以写出更足够清晰的代码
├── routers
│ ├── open
│ │ └── demo.go
│ ├── web
│ │ └── user.go
│ └── app.go
在routers/open/demo.go
文件中, 建立LoadDemoRouter(e *gin.Engine)
函数, 在函数内部规划业务路由包内的路由代码
func LoadDemoRouter(e *gin.Engine) {
e.GET("/index", open.NewDemoController().Index)
}
最后在routers/app.go
注册
func registerRouter(e *gin.Engine) {
open.LoadDemoRouter(e)
}
这样规划出来的路由代码, 完全足够清晰, app.go
不仅区分开发/生产场景启动不同路由引擎, 还加载全部模版文件, 所以在业务路由包内不必关心是前后端分离的路由还是api
路由
路由组
首先我们从open/demo.go
开始:
定义一个路由分组只需要在我们的路由前添加Group
方法即可
e.Group 下的大括号只有分块代码作用 没有实际执行意义
func LoadDemoRouter(e *gin.Engine) {
d := e.Group("/open/demo")
{
d.GET("/index", open.NewDemoController().Index)
d.POST("/index", open.NewDemoController().Index)
}
}
路由中间件
实现路由中间件, 首先需要定义一个func(*Context)
函数作为中间件参数, 通常放在app/http/validator
下, 具体写法这里不做过多介绍, 参考中间件章节, 路由使用Use
方法即可实现中间件过滤
func LoadDemoRouter(e *gin.Engine) {
d := e.Group("/open/demo").Use(cors.Next())
{
d.GET("/index", open.NewDemoController().Index)
d.POST("/index", open.NewDemoController().Index)
}
}
路由参数验证器
gin-pro
路由使用验证器也十分简单, 只需要在控制器前加上验证器方法即可, GET
支持多参数 , 本质上都是func(*Context)
, 把验证器方法放在前面作为验证过滤作用 , 控制器放在最后作为返回response
的终止方法 ; 或许这不是官方推荐的方法, 但是是我认为这是最爽的解决方案; 当然你也可以不使用这种方法,在控制器内部统一验证
func LoadDemoRouter(e *gin.Engine) {
d := e.Group("/open/demo").Use(cors.Next())
{
// demo.NewIndexValidator().CheckParams 为验证器
// open.NewDemoController().Index 为控制器
d.GET("/index", demo.NewIndexValidator().CheckParams, open.NewDemoController().Index)
}
}
推荐文章: