后台项目结构如何?
后台项目名曰“鹰眼”,英文名 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)
}
//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/