package apis import ( "app/apis/admin" "app/apis/asset" "app/apis/daytask" "app/apis/extend" "app/apis/magic" "app/apis/middleware" "app/apis/node" "app/apis/pub" "app/apis/user" "app/commons/config" "app/commons/core" "app/commons/gin_engine" "fmt" "github.com/gin-gonic/gin" ) // 服务启动 // 所有服务组合到一起同时启动 // 支持分开启动 减少api之间的耦合 func RunHttp() { ginEngine := gin_engine.NewHttpEngine() // 创建Gin引擎 // 接口默认前缀 api defaultRouterPrefix := "api/v1" if config.AppConf().RouterPrefix != "" { defaultRouterPrefix = config.AppConf().RouterPrefix } rootGroup := ginEngine.Group(defaultRouterPrefix) // 使用配置路由前缀 // todo: 根据业务分离服务 启多服务 可减少接口耦合影响 mountPubRouters(rootGroup) // 挂载公共路由 无必须jwt鉴权 以及回调 // 以下为私有路由 // user路由 mountUserRouters(rootGroup) // asset路由 mountAssetRouters(rootGroup) // ... biz路由 mountNodeRouters(rootGroup) mountMagicRouters(rootGroup) // 挂载DayTask路由 -- 任务平台用户端 mountDayTaskRouters(rootGroup) // 挂载扩展路由 -- 对外部系统 mountExtendRouters(rootGroup) // 挂载管理路由 -- 对内部系统 mountAdminRouters(rootGroup) //for _, item := range ginEngine.Routes() { // core.Log.Infof("METHOD | %s | PATH:%s ", item.Method, item.Path) //} address := fmt.Sprintf(":%d", config.AppConf().ApiAddr) core.Log.Infof("Http 开启监听端口: %s", address) core.Log.Infof("Gin run : %+v", ginEngine.Run(address)) } // 挂载公共路由 // jwt为可选 func mountPubRouters(group *gin.RouterGroup) { g := group.Group("pub") // 公共路由 g.Use(middleware.OptionalJwtMiddleware()) // 允许携带 不强制要求token g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n gin_engine.RegisterRouter(g, pub.Router{}) // 注册公共路由 } // 挂载私有路由 // jwt为必填 func mountUserRouters(group *gin.RouterGroup) { g := group.Group("user") g.Use(middleware.JwtMiddleware()) // 强制要求携带token g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n g.Use(middleware.UserLogger()) // 启用日志记录 gin_engine.RegisterRouter(g, user.Router{}) // 注册token路由 } func mountAssetRouters(group *gin.RouterGroup) { g := group.Group("asset") g.Use(middleware.JwtMiddleware()) // 强制要求携带token g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n g.Use(middleware.UserLogger()) // 启用日志记录 gin_engine.RegisterRouter(g, asset.Router{}) // 注册token路由 } // 业务服务路由- node func mountNodeRouters(group *gin.RouterGroup) { g := group.Group("node") g.Use(middleware.JwtMiddleware()) // 强制要求携带token g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n g.Use(middleware.UserLogger()) // 启用日志记录 gin_engine.RegisterRouter(g, node.Router{}) // 注册token路由 } // 业务服务路由 func mountMagicRouters(group *gin.RouterGroup) { g := group.Group("magic") g.Use(middleware.JwtMiddleware()) // 强制要求携带token g.Use(middleware.I18n()) // 启用多语言 -- 自动写入i18n g.Use(middleware.UserLogger()) // 启用日志记录 gin_engine.RegisterRouter(g, magic.Router{}) // 注册token路由 } // 挂载DayTask公共路由(无需登录) func mountDayTaskRouters(group *gin.RouterGroup) { // 公共路由 - 无需登录 pubGroup := group.Group("dt") pubGroup.Use(middleware.OptionalJwtMiddleware()) // 允许携带 不强制要求token pubGroup.Use(middleware.I18n()) // 启用多语言 gin_engine.RegisterRouter(pubGroup, daytask.Router{}) // 用户路由 - 需要登录 userGroup := group.Group("dt") userGroup.Use(middleware.JwtMiddleware()) // 强制要求携带token userGroup.Use(middleware.I18n()) // 启用多语言 userGroup.Use(middleware.UserLogger()) // 启用日志记录 gin_engine.RegisterRouter(userGroup, daytask.UserRouter{}) } // 挂载外部接口 // 可使用其他中间件鉴权 func mountExtendRouters(group *gin.RouterGroup) { g := group.Group("extend") gin_engine.RegisterRouter(g, extend.Router{}) } // 挂载管理端接口 // 使用 Keccak256Hash sign签名服务鉴权 func mountAdminRouters(group *gin.RouterGroup) { g := group.Group("adi") g.Use(middleware.ExtendAuthWithName()) // 使用Keccak256Hash验证签名信息 指定该接口仅为管理系统服务 //g.Use(middleware.IPWhitelist([]string{"127.0.0.1"})) // 限制IP白名单 -- 限制了前端的地址 gin_engine.RegisterRouter(g, admin.Router{}) }