Skip to content

Gin Restful Web API, Simple Single Golang Web Service

License

Notifications You must be signed in to change notification settings

openapphub/gin-service

Repository files navigation

openapphub-go

项目基于大佬的 singo 二开修改, 调整了项目结构,加入了docker、makefile、AUTH_MODE(jwt or session)等内容。从头学习的话推荐跟着大佬的项目进行:


openapphub: Simple Single Golang Web Service

openapphub: 用最简单的架构,实现够用的框架,服务海量用户

https://github.com/Gourouting/openapphub

更新日志

  1. 已支持接口测试
  2. 已经支持go1.20,请安装这个版本的golang使用本项目
  3. 新增JWT认证支持
  4. 新增Swagger文档
  5. 新增 zap logs处理

目的

本项目采用了一系列Golang中比较流行的组件,可以以本项目为基础快速搭建Restful Web API

特色

本项目已经整合了许多开发API所必要的组件:

  1. Gin: 轻量级Web框架,自称路由速度是golang最快的
  2. GORM: ORM工具。本项目需要配合Mysql使用
  3. Gin-Session: Gin框架提供的Session操作工具
  4. Go-Redis: Golang Redis客户端
  5. godotenv: 开发环境下的环境变量工具,方便使用环境变量
  6. Gin-Cors: Gin框架提供的跨域中间件
  7. httpexpect: 接口测试工具
  8. gzip: 接口压缩
  9. JWT-Go: JWT认证支持
  10. ulule-limiter: 速率限制
  11. Swagger: API文档生成工具
  12. zap :zap 高性能、结构化的日志库
  13. secure: 为Go提供了一些安全相关的HTTP头
  14. 自行实现了国际化i18n的一些基本功能
  15. 本项目支持基于cookie的session和JWT两种认证方式

本项目已经预先实现了一些常用的代码方便参考和复用:

  1. 创建了用户模型
  2. 实现了/api/v1/user/register用户注册接口
  3. 实现了/api/v1/user/login用户登录接口
  4. 实现了/api/v1/user/me用户资料接口(需要登录后获取session)
  5. 实现了/api/v1/user/logout用户登出接口(需要登录后获取session)
  6. 实现了/api/v1/user/refresh刷新JWT token接口

本项目已经预先创建了一系列文件夹划分出下列模块:

  1. cmd/api: 主程序入口
  2. database/migrations: 数据库建表相关
  3. internal/api: MVC框架的controller,负责协调各部件完成任务
  4. internal/model: 数据库模型和数据库操作相关的代码
  5. internal/service: 负责处理比较复杂的业务,把业务代码模型化可以有效提高业务代码的质量
  6. internal/serializer: 储存通用的json模型,把model得到的数据库模型转换成api需要的json对象
  7. pkg/cache: redis缓存相关的代码
  8. internal/auth: 权限控制相关的代码
  9. internal/middleware/rate_limiter: 速率限制
  10. internal/util: 一些通用的小工具
  11. internal/config: 配置文件和配置加载相关的代码
  12. internal/middleware: 中间件相关的代码
  13. test: 测试用例

环境变量

项目在启动的时候依赖以下环境变量,但是在也可以在项目根目录创建.env文件设置环境变量便于使用(建议开发环境使用)

MYSQL_DSN="db_user:db_password@/db_name?charset=utf8&parseTime=True&loc=Local" # Mysql连接地址
REDIS_ADDR="127.0.0.1:6379" # Redis端口和地址
REDIS_PW="" # Redis连接密码
REDIS_DB="" # Redis库从0到10
SESSION_SECRET="setOnProducation" # Seesion密钥,必须设置而且不要泄露
GIN_MODE="debug"
LOG_LEVEL="debug"
AUTH_MODE="session" # 认证模式,可选值:session 或 jwt
JWT_SECRET="setOnProducation" # JWT密钥,使用JWT认证模式时必须设置
PORT="3000" # 服务端口号

Godotenv

本项目使用Godotenv加载环境变量,在使用和部署项目的时候可以配置环境变量增加灵活性。

Go Mod

本项目使用Go Mod管理依赖。

go mod download

运行

go run cmd/api/main.go
// or user make
make install
make dev-setup
make docker-up
make run

项目运行后启动在3000端口(可以通过PORT环境变量修改)

编译

go build -o openapphub cmd/api/main.go

接口测试

本项目使用httpexpect进行接口测试,测试文件位于test目录下。运行测试:

go test -v ./test

Swagger文档

本项目使用Swagger自动生成API文档。

  1. 安装swag

    go install github.com/swaggo/swag/cmd/swag@latest
    
  2. 生成文档

    swag init -g cmd/api/main.go -o docs
    
  3. 访问文档:启动服务后,访问 http://localhost:3000/swagger/index.html

Makefile

项目根目录下的Makefile文件包含了常用的操作命令,使用make命令即可执行。

Docker支持

本项目支持使用Docker进行部署,根目录下的Dockerfile文件已经配置好了相应的构建流程。

贡献

如果你有好的意见或建议,欢迎给我们提 issue 或 pull request。

版权

Copyright (c) 2024 Gourouting

Licensed under the MIT license