后台项目结构

* 本页面总结凯冰音乐APP项目后台项目结构的相关内容。

后台项目结构如何?

后台项目名曰“鹰眼”,英文名 eagle。 作为APP的后台接口系统,专门选择了一套非常适合于接口开发的Go语言框架——Gin。同时,前后台将启用HTTP/2协议进行交互,采用HTTPS证书加密,另外对接口内容使用RSA非对称+AES对称加密两种加密方式结合的形式进行“数据安全”保证(虽然没啥重要数据,哈哈),其实是为了体验和学习一下在真正的项目中使用两种加密方案。具体细节,在下一节中会详细总结分享。

整个项目的结构如下图所示:

后台项目结构截图
后台项目结构截图

从图中可以看到,项目有如下目录结构:

  • conf:项目配置文件目录,配置文件采用yaml格式文件
  • controllers:项目控制器文件目录,相关的控制器文件都在此目录下
  • lib:Library库文件目录,相关的功能逻辑都在这里面实现
  • middleware:Gin框架独有的“中间件”模块目录,比如数据的validators都在此目录下
  • models:数据model目录,这个不需要特别解释了,跟数据相关的文件都在这了,无论是数据库,还是缓存,亦或是第三方API等
  • routers:路由目录,路由信息都在这里配置,例如:
  •   //app接口 设置路由分组
      apiMusic := r.Group("/app/music")
      {
        //音乐:首页接口
        apiMusic.POST("/default.json", validators.DefaultValidate(), music.Default)
        //音乐:歌曲详情
        apiMusic.POST("/song-detail.json", validators.SongValidate(), music.SongDetail)
        //音乐:歌曲列表
        apiMusic.POST("/song-list.json", validators.SongListValidate(), music.SongList)
    
      }
  • utils:“工具包”目录,相关的工具类型的模块放在这里,比如加密encrypt、redis组件、json组件等
  • utils:“工具包”目录
    utils:“工具包”目录
  • 默认目录下:main.go 程序入口文件
  •   //main.go 部分代码示例
      package main
    
      import (
        "eagle/models"
        "eagle/routers"
        "eagle/utils/config"
        ***
        "go.uber.org/zap"
      )
    
      func init() {
    
        //初始化配置文件
        if err := config.Init(""); err != nil {
          log.Error("config init error,", zap.Error(err))
          panic(err)
        }
    
        //初始化log
        log.ZapLoggerInit()
    
        //连接数据库
        models.Setup()
        models.AccountDBSetup()
    
        //初始化Redis
        goredis.Setup()
    
        //http通用包初始化
        httptrack.SetUp(httptrack.CommonConfig{
          ***
        })
    
        //生成RSA秘钥(每次程序启动更新,对应APP每次启动后台拉取最新秘钥)
        if err := goEncrypt.GetRsaKey(); err != nil {
          log.Error("getRsaKey error,", zap.Error(err))
        }
    
        log.Info("eagle init success:")
    
      }
    
      func main() {
    
        //路由模块配置
        routerModule := viper.GetString("router_module")
    
        //运行路由模块配置
        var router *gin.Engine
        switch routerModule {
        case "api":
          router = routers.InitApiRouter()
        default:
          router = routers.InitApiRouter()
        }
    
        router.Run(fmt.Sprintf(":%d", viper.GetInt("server.HTTP_PORT")))
      }

以上就是整个后台部分的程序结构,细节的一些问题实现,将在后面的章节中进行专项总结。


* 本页内容参考以下数据源:

  • https://doc.zkbhj.com/golang/

凯冰科技 · 代码改变世界,技术改变生活
下一篇:接口加密方案 →