一个同时支持Session以及JWT的高性能高可用 Golang Restful API 脚手架 !
项目基于MIT协议,任何人可以进行修改并发布,如果本项目你发现有任何BUG,欢迎提交PullRequest :fire:
感谢JetBrains提供IDE.
本项目采用了一系列Golang中比较流行的组件,可以以本项目为基础快速搭建Restful Web API
响应序列化:
任何一个json返回值,都是以serializer.Response进行序列化出来
最后在api(controll)层c.JSON返回的时候加.Result() 进行加TimeStamp
DuckyGoTest.py
, 按照自己需求更改即可流畅的完成测试~本项目已经整合了许多开发API所必要的组件:
本项目已经预先实现了一些常用的代码方便参考和复用:
/api/v1/user/register
用户注册接口/api/v1/user/login
用户登录接口/api/v1/user/me
用户资料接口(需要登录后获取session)/api/v1/user/logout
用户登出接口(需要登录后获取session)/api/v1/user/changepassword
用户修改密码接口(需要登录后获取session)/api/v2/user/register
用户注册接口(和v1基本一样)/api/v2/user/login
用户登录接口(获得jwtToken, 无状态)/api/v2/user/me
用户个人信息接口(传递token验证身份, 无状态)/api/v2/user/changepassword
用户修改密码接口(传递token验证身份, 无状态)/api/v2/user/logout
用户注销接口(传递token, 并且将token存入黑名单, 无状态)本项目已经预先创建了一系列文件夹划分出下列模块:
第一次使用要先运行log
文件夹下的bat
批处理,用来生成记录log所需要的log文件.
当设置LOG_LEVEL设置为ERROR
就只会显示 error panic
当设置LOG_LEVEL设置为WARNING
就只会显示 warning error panic
当设置LOG_LEVEL设置为INFO
就只会显示 info warning error panic
当设置LOG_LEVEL设置为DEBUG
则全部显示
项目在启动的时候依赖以下环境变量,但是在也可以在项目根目录创建.env文件设置环境变量便于使用(建议开发环境使用)
MYSQL_DSN="db_user:db_passwd@tcp(127.0.0.1:3306)/db_name?charset=utf8&parseTime=True&loc=Local" # Mysql连接配置
RABBITMQ_DSN="amqp://mq_user:mq_passwd@localhost:5672/virtual_host" # RabbitMQ连接配置 默认没有开启
REDIS_ADDR="127.0.0.1:6379" # Redis端口和地址
REDIS_PW="" # Redis连接密码
REDIS_DB="" # Redis库从0到10,不填即为0
SESSION_SECRE="" # Seesion密钥 (切记不能泄露!!)
JWT_SECRET_KEY="" # JWT密钥配置 (切记不能泄露!!)
GIN_MODE="debug" # 设置gin的运行模式,有 debug 和 release
LOG_LEVEL="ERROR" # 设置为ERROR基本不会记录log 设置为DEBUG则会详细记录每次请求
RIM="notuse" # 设置为use的时候会启动mysql之类的连接,非设置为notuse就会关闭mysql连接
V1="on" # 是否启动v1 (Session-Cookie身份验证)
V2="off" # 是否启动v2 (JWT-Token身份验证)
Windows安装MySQL和Redis麻烦?:no_mouth: 你可以使用Docker啊!:sunglasses:
docker run -di --name redis -p 6379:6379 redis
docker run -di --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yourpassword mysql
因为启动容器指定了--name, 后续可以使用docker start|stop redis|mysql
来进行开启或者关闭.
如需要使用navicat等工具管理MySQL,可能会出现报错等情况::dizzy_face:
docker exec -it mysql /bin/bash # 打开mysql bash交互
mysql -u root -p # 进入mysql交互
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; # 更改加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpassword'; # 更改密码
FLUSH PRIVILEGES; # 刷新
本项目使用Go Mod管理依赖。
go mod init DuckyGo
export GOPROXY=http://mirrors.aliyun.com/goproxy/
go run main.go // 自动安装
go run main.go
项目运行后启动在8000端口(可以修改,参考gin文档)
本项目修改端口请查看main.go
go build main.go
Docker运行:
docker build -t duckygo:release .
docker run -di --name duckygo -p 8000:8000 duckygo:release
如需交叉编译请看这里