路由注册

这里使用了分组路由的注册方式,分组路由也是推荐的路由注册方式。由于gf-demos项目包含其他的示例功能,因此该路由中包含了其他的一些路由注册项,仅供参考。

https://github.com/gogf/gf-demos/blob/master/router/router.go

  1. package router
  2. import (
  3. "github.com/gogf/gf-demos/app/api"
  4. "github.com/gogf/gf-demos/app/service"
  5. "github.com/gogf/gf/frame/g"
  6. "github.com/gogf/gf/net/ghttp"
  7. )
  8. func init() {
  9. s := g.Server()
  10. // 分组路由注册方式
  11. s.Group("/", func(group *ghttp.RouterGroup) {
  12. group.Middleware(
  13. service.Middleware.Ctx,
  14. service.Middleware.CORS,
  15. )
  16. group.ALL("/chat", api.Chat)
  17. group.ALL("/user", api.User)
  18. group.Group("/", func(group *ghttp.RouterGroup) {
  19. group.Middleware(service.Middleware.Auth)
  20. group.ALL("/user/profile", api.User.Profile)
  21. })
  22. })
  23. }

可以看到,我们的路由注册管理也使用了包初始化方法init实现隐式初始化,这样做的好处是可以在router目录中使用不同的go文件注册不同的init来分别实现不同的路由注册。当项目的路由比较多的时候,可以采用不同的go文件管理不同的路由,这在团队协作的项目中也比较方便。

分组路由

这里通过s.Group方法使用了分组路由实现路由注册,并通过group.All来实现具体的路由注册,分组路由请参考后续 路由注册-分组路由 章节。

如果您对HTTP Method没有特殊的需求,建议统一使用ALL方法注册路由,使得该路由可以被任意的HTTP Method访问。特别是在跨域场景中,可能会同一个路由接口需要同时满足POSTOPTIONS请求,这种情况只有使用ALL方法注册路由。

中间件注册

这里使用了group.Middleware方法注册中间件,可以将中间件看做请求的拦截器,可以在中间件中实现特定的请求处理后转发给下一层请求继续执行。中间件可以注册多个,WebServer会按照中间件注册的顺序执行。中间件的具体介绍请参考后续 路由管理-中间件/拦截器 章节。

在该路由的配置中,所有接口均绑定了两个中间件:

  • service.Middleware.Ctx初始化上下文变量
  • service.Middleware.CORS允许跨域请求的中间件

其中/user/profile路由绑定了鉴权中间件service.Middleware.Auth,需要鉴权控制才能访问。

Content Menu