bff-template
- BFF means "Backends for Frontends"
- 仅针对普通HTTP请求。sse/websocket/文件流等请求由其他服务管理
接口种类
- 直接转发,可使用
internal/routers/redirect_utils.go
直接转发
- http请求原子服务,使用
internal/httpclient/client.go
进行请求
- 有些业务是异步处理的,需要监听rabbitmq,处理对应逻辑
项目结构说明
整体目录结构
参考文档Standard Go Project Layout
cmd/
: 项目入口,main函数。
internal/
: 业务代码。internal为不需要被外部repo调用的代码,聚合层几乎都是业务逻辑,无需被外部引用。
deps/
: 本地依赖包。非公共仓库的。放在vendor文件夹执行go mod vendor
会丢失文件,故放到不被go直接管理的文件夹下
api/
: openapi/swagger文档文件
docs/
: 项目设计文档
configs/
: config-template或默认config文件
build/
: 构建代码,如Dockerfile
deployments/
: 部署代码,如k8s yaml等
文件
go.mod
, go.sum
: golang依赖管理代码
Makefile
: 常用命令
.gitmodules
: git submodule定义,通过git submodule add
自动生成
internal目录结构
configs
: 应用配置文件映射结构体
daos
:调用数据库逻辑代码
database
: 数据库驱动相关代码
middlewares
:中间件,如auth等
models
:数据库结构体定义
requests
:请求结构体定义
responses
:响应结构体定义
routers
:路由管理
services
:应用逻辑函数
生成swagger文档
- 确保当前环境swag命令可以使用
- 安装swag命令
go get -u github.com/swaggo/swag/cmd/swag
- 将
$GOPATH/bin
添加到PATH
- 生成文档到api文件夹
swag init -g cmd/api_server.go -o api
- 运行项目是查看swagger文档
go run cmd/api_server.go
- 打开浏览器到
http://<HOST>:<PORT>/swagger/index.html
找到API文档
- 导入到Yapi
git submodule管理
apulis代码日常托管在自建gitlab, 但部分代码可能开源至github,故mod命名统一以github.com/apulis
开头
添加
使用git submodule add
命令
git submodule add git@apulis-gitlab.apulis.cn:sdk/simple-gin-logger.git deps/simple-gin-logger
go mod配置
在go.mod添加replace,用本地deps
目录下的替换github.com/apulis
相关依赖
replace github.com/apulis/simple-gin-logger v0.0.0 => ./deps/simple-gin-logger
如本地没load代码,下载代码
git submodule init
git submodule update
调试和运行项目
- 依照
config.template.yaml
编辑config.yaml
文件
- 运行
go run cmd/api_server.go
Makefile包含命令
get-deps
: 加载submodule, 并把第三方依赖下载到本地vendor/
文件夹下
vet-check-all
: 使用go vet工具扫描代码(vet工具golang自带)
gosec-check-all
: 使用gosec工具扫描代码(gosec工具go get github.com/securego/gosec/cmd/gosec
)
build-api-server-bin
: 构建二进制文件
build-api-server-docker
: 构建docker
gen-swagger
: 生成swagger文档