为了让大家了解“蜂工厂”项目,这篇博文详细介绍了“蜂工厂”项目的工作原理。
“蜂工厂”为“蜂乐园”平台提供服务,包括:处理并存储“蜂乐园”用户、数据等。
回答这个问题前,需先回答:为什么选择”Go”搭建服务器?。Golang
作为21世纪的语言,自从诞生以来,就争论不断。这里不展开对比讨论,只列举Golang
的优势:
goroutine
的天生并发,可以用简洁的代码实现并发编程。比较流行的,Go
的HTTP服务框架有:“Beego”和“Gin”。”Beego”以全见长,而”Gin”以快见长。
HTTP
模块外,还支持logs
、orm
等模块。而”Gin”框架只是一个“HTTP”库,其他功能需要结合Go
社区的其他库资源。这也使”Gin”框架的开放性更高,可以利用更多优秀的其他资源,如orm
就可以采用“GORM”实现。Go
的官方http
库已经很友好了,如果HTTP服务框架拖累了性能,就得不偿失了。“蜂工厂”是“蜂乐园”项目中的基于Gin
框架的REST
风格服务器,是“蜂乐园”的大脑,用于处理并存储“蜂乐园”用户、数据等。之所以叫“蜂工厂”,是因为它能接收数据,处理并厂出新数据。当前“蜂工厂”REST
风格的框架已经搭建完成,包括:利用中间件进行权限检测,数据库操作等。但是,REST API
还在开发中,希望以后其可以有更多强大的API
供用户使用。
由于“蜂工厂”是一个后台服务器,并没有友好的UI
界面,因此这里用Postman
结合“swagger API 文档”,以操作URL: /api/v1/pub/login
做演示。
“蜂工厂”是一个基于“Gin”框架的后台服务器。下面罗列了部分“蜂工厂”涉及的技术。如果您对以项某项内容感兴趣,那么您可以继续往下看。在“How”部分,我们将详细介绍“蜂工厂”是如何实现的。
GitHub
上的文件组织遵循golang-standards/project-layout规则,结构如下:.
├── Makefile // 用Makefile管理项目的编译
├── README.md // 解释文档
├── cmd // 程序入口文件夹
| └── server // 主程序文件夹
| └── main.go // 主程序,每一个Go项目有且只有一个main入口
├── configs // 用户配置文件夹
| └── config.toml // 存储对服务器的所有配置
├── docs // 存储服务器的Swagger API文档
├── export // 存储服务器输出文件,包括数据信息、log信息等
├── go.mod // Go项目包管理文件
├── go.sum // Go项目包管理文件
└── internal // 项目内部源文件(其他项目无法直接调用)
└── app // 内部源文件主目录
├── app.go // 内部源文件初始化入口
├── auther // 身份认证模块
├── auther.go // 身份认证模块初始化入口
├── config // 用户配置文件解析模块
├── controller // 控制器模块,用于处理业务逻辑
├── controller.go // 控制器模块初始化入口
├── errors // 服务器错误模块,定义错误信息
├── ginhelper // gin框架utilities
├── logger // 日志模块
├── logger.go // 日志模块初始化入口
├── model // Model模块,提供接口给控制器存储数据
├── model.go // Model模块初始化入口
├── routers // 路由模块
| ├── api // REST API
| ├── middleware // 中间件
| ├── routers.go // 初始化REST API和中间件
| └── swagger.go // API 文档入口
├── routers.go // 路由初始化入口,并开启HTTP服务
├── store // 数据库模块,提供接口给Model模块和数据库打交道
└── store.go // 数据模块初始化入口
“蜂工厂”启动和工作流程图
logrus
库实现的。GORM
,GO-Redis
,buntdb等。User
数据的Query
操作),是控制器模块和数据库模块的中间层,控制器模块应通过Model模块操作数据,而不应直接操作数据库模块。request
,返回response
给用户。JWT
身份验证。由于JWT
口令需要有销毁记录,以保证口令被销毁后,用户无法通过验证。因此,身份验证模块需要依赖“数据库模块”对数据库进行操作。REST API
请求URL
的解析,经过中间件处理,到达指定控制器模块相应API