Gin + Gorm 实现CRUD操作的终极指南,再也不需要手写CRUD了
=====================================
Gin 和 Gorm 是 Golang 开发中比较受欢迎的两个库,分别用于 Web 框架和数据库操作。两者结合使用,可以轻松实现 CRUD、自定义查询、分页等操作,快速构建 RESTful API 服务。
本文将介绍使用脚手架sponge如何快速添加 CRUD api,sponge集成了 Gin 和 Gorm,专为高效便捷开发web后端服务而生。为了避免从0开始编码(例如定义模型、写CRUD逻辑、路由配置、错误码、api文档等),sponge支持一次性生成CRUD api所需的代码,不需要写任何go代码,这是最简单的添加CRUD api方式之一。
sponge的github地址: github.com/zhufuyi/spo…
环境准备
- 确保您的环境已经安装了 Go 和 一个mysql服务,mysql创建有一些表,例如 user库下的表
- 安装一个脚手架sponge,支持在windows、mac、linux环境下,点击查看 安装sponge说明。
- 安装完成后打开终端,启动sponge UI界面服务:
sponge run
在浏览器访问 http://localhost:24631
,进入sponge生成代码的UI界面。
创建web服务
进入sponge的UI界面:
- 点击左边菜单栏【SQL】–>【创建web服务】;
- 选择数据库
mysql
,填写数据库dsn
,然后点击按钮获取表名
,选择表名(可多选); - 填写其他参数,鼠标放在问号
?
位置可以查看参数说明;
填写完参数后,点击按钮下载代码
生成web服务完整项目代码,如下图所示:
这是创建的web服务代码目录,已经包含了teacher表的CRUD api所有代码,包含了Gin和Gorm的初始化和配置代码,开箱即用。
.
├─ cmd
│ └─ user
│ ├─ initial
│ └─ main.go
├─ configs
├─ deployments
│ ├─ binary
│ ├─ docker-compose
│ └─ kubernetes
├─ docs
├─ internal
│ ├─ cache
│ ├─ config
│ ├─ dao
│ ├─ ecode
│ ├─ handler
│ ├─ model
│ ├─ routers
│ ├─ server
│ └─ types
└─ scripts
解压代码文件,打开终端,切换到web服务代码目录,执行命令:
# 生成swagger文档
make docs
# 编译和运行服务
make run
在浏览器打开 http://localhost:8080/swagger/index.html,可以在页面上进行增删改查api测试,如下图所示:
批量添加CRUD api
如果有新的mysql表需要生成CRUD api代码,
- 点击左边菜单栏【Public】–>【生成handler CRUD代码】;
- 选择数据库
mysql
,填写数据库dsn
,然后点击按钮获取表名
,选择mysql表(可多选); - 填写其他参数。
填写完参数后,点击按钮下载代码
生成handler CRUD代码,如下图所示:
生成的CRUD handler代码目录如下
.
└─ internal
├─ cache
├─ dao
├─ ecode
├─ handler
├─ model
├─ routers
└─ types
解压代码,把目录internal
移动到web服务代码目录下,就完成了在web服务中批量添加handler CURD api。
在终端执行命令:
# 生成swagger文档
make docs
# 编译和运行服务
make run
在浏览器刷新页面 http://localhost:8080/swagger/index.html,在页面上可以看到新添加的CURD api。
批量添加标准化的CURD api代码到web服务项目代码中,不需要人工编写任何go代码,这已经是在web服务以最简单的方式添加CRUD api了。
人工添加自定义api
由于自定义api不能像CRUD那样自动生成代码,则需要人工编写完整的自定义代码了,包括路由设置、handler函数、定义请求参数和返回值、定义字段校验tag、定义业务错误码、填写swagger用的注解信息、编写业务逻辑代码等一系列步骤。
例如在本项目中添加一个登录接口,需要经过下面6个步骤:
1. 定义请求参数和返回结果结构体
进入目录internal/types
,打开文件teacher_types.go
,添加登录的请求和返回结构体代码:
// LoginRequest login request params
type LoginRequest struct {
Email string `json:"email" binding:"email"` // 邮件
Password string `json:"password" binding:"min=6"` // 密码
}
// LoginRespond data
type LoginRespond struct {
ID uint64 `json:"id"`
Token string `json:"token"`
}
[!tip] 结构体字段tag中
bingding
是字段校验规则,点击查看更多validator校验规则。
2. 定义错误码
进入目录internal/ecode
,打开文件teacher_http.go
,添加一行代码,定义登录错误码:
var (
teacherNO = 1
teacherName = "teacher"
teacherBaseCode = errcode.HCode(teacherNO)
// ...
ErrLoginTeacher = errcode.NewError(teacherBaseCode+8, "failed to login "+teacherName)
// for each error code added, add +1 to the previous error code
)
3. 定义handler函数
进入目录internal/handler
,打开文件teacher.go
,定义一个登录方法,并添加swagger注解:
// Login 登录
// @Summary login
// @Description login by account and password
// @Tags teacher
// @accept json
// @Produce json
// @Param data body types.LoginRequest true "login information"
// @Success 200 {object} types.Result{}
// @Router /api/v1/teacher/login [post]
func (h *teacherHandler) Login(c *gin.Context) {
// 验证密码
// 生成和存储token
response.Success(c, gin.H{
"id": 1,
"token": "xxxxxx",
})
}
然后把Login方法添加到TeacherHandler接口:
type TeacherHandler interface {
Create(c *gin.Context)
// ...
Login(c *gin.Context)
}
4. 注册路由
进入目录internal/routers
,打开文件teacher.go
,把Login路由注册进来:
func teacherRouter(group *gin.RouterGroup, h handler.TeacherHandler) {
group.POST("/teacher", h.Create)
// ...
group.POST("/teacher/login", h.Login)
}
5. 编写业务逻辑代码
编写登录的业务逻辑代码,例如验证密码、生成token等。
在人工添加的自定义api中,可能需要对数据增删改查操作(也叫dao CRUD),这些dao CRUD代码可以直接生成,不需要人工编写,直接在在sponge的UI界面生成: Public –> 生成dao CRUD代码
6. 测试api
编写完业务逻辑代码后,在终端执行命令:
# 生成swagger文档
make docs
# 编译和运行服务
make run
在浏览器刷新 http://localhost:8080/swagger/index.html,在页面上可以看到登录api,在页面测试通过后,一个自定义的api才算正式添加完成。
总结
sponge是集成了Gin 和 Gorm 强大的web后端服务开发工具,可以帮助开发者轻松快速构建 RESTful API 服务。希望能够帮助 Golang 开发者彻底告别手写 CRUD api,更轻松便捷的构建高效、优雅的 RESTful API 服务。
原文链接: https://juejin.cn/post/7360892717545291785
文章收集整理于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除,如若转载,请注明出处:http://www.cxyroad.com/17304.html