enter.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package apis
  2. import (
  3. "app/apis/admin"
  4. "app/apis/asset"
  5. "app/apis/daytask"
  6. "app/apis/extend"
  7. "app/apis/magic"
  8. "app/apis/middleware"
  9. "app/apis/node"
  10. "app/apis/pub"
  11. "app/apis/user"
  12. "app/commons/config"
  13. "app/commons/core"
  14. "app/commons/gin_engine"
  15. "fmt"
  16. "github.com/gin-gonic/gin"
  17. )
  18. // 服务启动
  19. // 所有服务组合到一起同时启动
  20. // 支持分开启动 减少api之间的耦合
  21. func RunHttp() {
  22. ginEngine := gin_engine.NewHttpEngine() // 创建Gin引擎
  23. // 接口默认前缀 api
  24. defaultRouterPrefix := "api/v1"
  25. if config.AppConf().RouterPrefix != "" {
  26. defaultRouterPrefix = config.AppConf().RouterPrefix
  27. }
  28. rootGroup := ginEngine.Group(defaultRouterPrefix) // 使用配置路由前缀
  29. // todo: 根据业务分离服务 启多服务 可减少接口耦合影响
  30. mountPubRouters(rootGroup) // 挂载公共路由 无必须jwt鉴权 以及回调
  31. // 以下为私有路由
  32. // user路由
  33. mountUserRouters(rootGroup)
  34. // asset路由
  35. mountAssetRouters(rootGroup)
  36. // ... biz路由
  37. mountNodeRouters(rootGroup)
  38. mountMagicRouters(rootGroup)
  39. // 挂载DayTask路由 -- 任务平台用户端
  40. mountDayTaskRouters(rootGroup)
  41. // 挂载扩展路由 -- 对外部系统
  42. mountExtendRouters(rootGroup)
  43. // 挂载管理路由 -- 对内部系统
  44. mountAdminRouters(rootGroup)
  45. //for _, item := range ginEngine.Routes() {
  46. // core.Log.Infof("METHOD | %s | PATH:%s ", item.Method, item.Path)
  47. //}
  48. address := fmt.Sprintf(":%d", config.AppConf().ApiAddr)
  49. core.Log.Infof("Http 开启监听端口: %s", address)
  50. core.Log.Infof("Gin run : %+v", ginEngine.Run(address))
  51. }
  52. // 挂载公共路由
  53. // jwt为可选
  54. func mountPubRouters(group *gin.RouterGroup) {
  55. g := group.Group("pub") // 公共路由
  56. g.Use(middleware.OptionalJwtMiddleware()) // 允许携带 不强制要求token
  57. g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n
  58. gin_engine.RegisterRouter(g, pub.Router{}) // 注册公共路由
  59. }
  60. // 挂载私有路由
  61. // jwt为必填
  62. func mountUserRouters(group *gin.RouterGroup) {
  63. g := group.Group("user")
  64. g.Use(middleware.JwtMiddleware()) // 强制要求携带token
  65. g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n
  66. g.Use(middleware.UserLogger()) // 启用日志记录
  67. gin_engine.RegisterRouter(g, user.Router{}) // 注册token路由
  68. }
  69. func mountAssetRouters(group *gin.RouterGroup) {
  70. g := group.Group("asset")
  71. g.Use(middleware.JwtMiddleware()) // 强制要求携带token
  72. g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n
  73. g.Use(middleware.UserLogger()) // 启用日志记录
  74. gin_engine.RegisterRouter(g, asset.Router{}) // 注册token路由
  75. }
  76. // 业务服务路由- node
  77. func mountNodeRouters(group *gin.RouterGroup) {
  78. g := group.Group("node")
  79. g.Use(middleware.JwtMiddleware()) // 强制要求携带token
  80. g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n
  81. g.Use(middleware.UserLogger()) // 启用日志记录
  82. gin_engine.RegisterRouter(g, node.Router{}) // 注册token路由
  83. }
  84. // 业务服务路由
  85. func mountMagicRouters(group *gin.RouterGroup) {
  86. g := group.Group("magic")
  87. g.Use(middleware.JwtMiddleware()) // 强制要求携带token
  88. g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n
  89. g.Use(middleware.UserLogger()) // 启用日志记录
  90. gin_engine.RegisterRouter(g, magic.Router{}) // 注册token路由
  91. }
  92. // 挂载DayTask公共路由(无需登录)
  93. func mountDayTaskRouters(group *gin.RouterGroup) {
  94. // 公共路由 - 无需登录
  95. pubGroup := group.Group("dt")
  96. pubGroup.Use(middleware.OptionalJwtMiddleware()) // 允许携带 不强制要求token
  97. pubGroup.Use(middleware.I18n()) // 启用多语言
  98. gin_engine.RegisterRouter(pubGroup, daytask.Router{})
  99. // 用户路由 - 需要登录
  100. userGroup := group.Group("dt")
  101. userGroup.Use(middleware.JwtMiddleware()) // 强制要求携带token
  102. userGroup.Use(middleware.I18n()) // 启用多语言
  103. userGroup.Use(middleware.UserLogger()) // 启用日志记录
  104. gin_engine.RegisterRouter(userGroup, daytask.UserRouter{})
  105. }
  106. // 挂载外部接口
  107. // 可使用其他中间件鉴权
  108. func mountExtendRouters(group *gin.RouterGroup) {
  109. g := group.Group("extend")
  110. gin_engine.RegisterRouter(g, extend.Router{})
  111. }
  112. // 挂载管理端接口
  113. // 使用 Keccak256Hash sign签名服务鉴权
  114. func mountAdminRouters(group *gin.RouterGroup) {
  115. g := group.Group("adi")
  116. g.Use(middleware.ExtendAuthWithName()) // 使用Keccak256Hash验证签名信息 指定该接口仅为管理系统服务
  117. //g.Use(middleware.IPWhitelist([]string{"127.0.0.1"})) // 限制IP白名单 -- 限制了前端的地址
  118. gin_engine.RegisterRouter(g, admin.Router{})
  119. }