通用Restful API项目模板
通用Restful API项目模板
欢迎使用,这是一个用Go编写的简单通用的Restful API项目,遵循SOLID原则。
部分灵感来自于 service-pattern-go
依赖
开始
安装
克隆项目代码
|
|
启动mysql服务并初始化数据库
|
|
注意:如果是在MacOS上使用Docker for Mac启动的容器,则需要安装 docker-connector ,否则无法在本机通过容器IP访问容器,原因参考这里。安装命令如下
|
|
镜像涉及到的Dockerfile与sql放置在docker文件夹下
运行单元测试
|
|
编译程序
|
|
运行程序
|
|
访问程序
|
|
介绍
这是一个简单通用的Restful API项目,内置依赖注入、Mocking等功能,旨在方便快速的编写安全可靠的Restful API代码。不同的数据结构之间通过接口来访问,避免直接引用具体的实现,这样就可以实现依赖注入及采用Mock结构进行单元测试的效果。
举例来说:
IPlayerServie --> IPlayerRepository
|
|
目录结构
|
|
controllers
控制器文件夹下包含所有Gin Route Handler,里面只包含处理Request和Response的逻辑,不包含任何业务逻辑和数据访问逻辑。仅依赖于interfaces下的IService接口,不依赖于具体实现。
interafces
接口文件夹下存放所有IService和IRepository接口定义及通过Mockery自动生成的用于单元测试的文件,不包含具体接口实现。
models
模型文件下下存放所有与数据库映射的实体模型对应的Go Struct,只包含数据结构,不包含数据访问逻辑。可以由 gen 根据数据库表结构自动生成,详情参考这里
repositories
仓库文件夹下存放所有数据库访问逻辑,且实现了interfaces下定义的IRepository接口,主要用到models文件夹下定义的实体结构。
services
服务文件夹下存放所有实现了services下定义的IService接口的逻辑,供controllers直接使用。其中涉及到的数据库访问部分均通过调用interfaces下的IRepository接口实现,不依赖任何具体实现。
viewmodels
视图模型文件夹下存放所有需要与API交互的实体,主要包含从API获取到的结构和返回值的结构。与models的区别在于前者对应api层,后者对应数据库层。
router
路由文件夹下包含了所有可以对外提供服务的Restful API的路由注册逻辑。
container
容器文件下包含了所有依赖注入需要的Provider的逻辑,且在此选择具体使用的接口实现类型。
Mocking
为方便进行单元测试,使用Mockery自动interfaces下接口实现,例如生成IPlayerService的实现,只需要进入interfaces文件夹下执行如下命令即可,最后会在interfaces下自动创建mocks文件夹来存放自动生成的文件。
|
|
需要提前安装mokery工具
Testing
有了依赖注入和Mock功能后,就可以针对任意接口实现编写单元测试了,示例中添加了针对serviceshecontrollers的单测,供参考。
能力支持
- Tracing
- PProf
- Prometheus Metrics
- Health Check
- Mock
- Testing
- Circuit Breaker
- Rate Limit
- Common go-utils
- …