gin四大请求方式实践——小型文章资源管理
1. RestFul风格介绍
RestFul风格 四大请求方式:
- GET,表示获取服务器上的资源
- POST,表示在服务器上创建资源
- PUT,表示更新或者替换服务器上的资源
- DELETE,表示删除服务器上的资源
今天以文件资源为例做实践,各个接口如下
// GET /articles 文章列表接口
// GET /articles/:id 文章详情接口
// POST /articles 添加文章接口
// PUT /articles/:id 修改某一篇文章接口
// DELETE /articles/:id 删除某一篇文章接口
2.实践过程
1、 导入Gin包
- 第一步-创建mod: 命令行输入
go mod init
- 第二步-克隆Github包: 命令行输入
go get github.com/gin-gonic/gin- 第三步-导入包:
import "github.com/gin-gonic/gin"
2、创建各接口
2.1 初始化各接口
func _getList(c *gin.Context) { //文章列表
c.JSON(200, gin.H{})
}
func _getDetail(c *gin.Context) { //文章详情
c.JSON(200, gin.H{})
}
func _create(c *gin.Context) { //添加文字
c.JSON(200, gin.H{})
}
func _uptate(c *gin.Context) { //编辑文章
c.JSON(200, gin.H{})
}
func _delete(c *gin.Context) { //删除文章
c.JSON(200, gin.H{})
}
router := gin.Default()
router.GET("/articles", _getList) //文章列表
router.GET("/articles/:id", _getDetail) //文章详情
router.POST("/articles", _create) //添加文字
router.PUT("/articles/:id", _uptate) //编辑文章
router.DELETE("/articles/:id", _delete) //删除文章
2.2 文章列表接口实现
- 封装结构体
// 数据类型结构体
type ArticleModel struct {
Title string `json:"title"`
Content string `json:"content"`
}
// 响应类型结构体
type Response struct {
Code int `json:"code"`
Data any `json:"data"`
Msg string `json:"msg"`
}
- 在接口中创建
文章列表实例并通过Json返回前端
func _getList(c *gin.Context) {
articleList := []ArticleModel{
{Title: "GO语言入门", Content: "这篇文章是《Gin》"},
{Title: "Python语言入门", Content: "这篇文章是《Django》"},
{Title: "Java语言入门", Content: "这篇文章是《Spring》"},
}
c.JSON(200, Response{0, articleList, "成功"})
}
-
使用Postman阶段测试
2.3 文章详情接口实现
- 在接口中创建
文章实例并返回前端
func _getDetail(c *gin.Context) {
//获取parem中的id
fmt.Println("id =", c.Param("id"))
article := ArticleModel{
Title: "GO语言入门", Content: "这篇文章是《Gin》",
}
c.JSON(200, Response{0, article, "成功"})
}
- 使用Postman阶段测试
2.4 添加文章接口实现
- 在接口中接收前端的Json数据,并通过Json反序列化操作将数据添加到数据库中实现添加操作
func _create(c *gin.Context) {
//接收前端传递来的Json数据
data, err := c.GetRawData()
if err != nil {
panic(err)
}
var m map[string]interface{} //创建m接受Json反序列化结果
_ = json.Unmarshal(data, &m)
c.JSON(200, Response{0, m, "成功"})
}
- 使用Postman阶段测试
2.5 编辑文章接口实现
- 首先接收前端动态参数id并通过id找到数据库中原数据(由于还未实现数据库阶段,所以查询和修改过程的代码并未实现)
- 然后根据前端POST的数据修改原数据
func _uptate(c *gin.Context) {
//获取parem中的id 找到数据库中原数据
fmt.Println("id =", c.Param("id"))
//找到数据库中原数据....
//接收前端传递来的Json新数据
data, err := c.GetRawData()
if err != nil {
panic(err)
}
var m map[string]interface{} //创建m接受Json反序列化结果
_ = json.Unmarshal(data, &m)
//修改数据库中原数据....
c.JSON(200, Response{0, m, "修改成功"})
}
- 使用Postman阶段测试
2.6 删除文章接口实现
- 只需要接收前端动态参数id并根据id找到数据库对应的原数据并删除数据即可
func _delete(c *gin.Context) {
//获取parem中的id 找到数据库中原数据并删除
fmt.Println("id =", c.Param("id"))
c.JSON(200, Response{0, map[string]string{}, "删除成功"})
}
- 使用Postman阶段测试
3. 实践总结
通过这次制作一个小型文章资源管理系统, 我学会了如何处理简单的后端业务,包括但不限于:
- 在写代码前梳理清楚各个业务所需要的接口和请求方式
- 简单的代码接口布局和管理流程
- 如何能够方便接口代码封装和后期维护
- RestFul风格的各个请求方式的应用场景和简单实现
每一个大型项目都是由简单的项目一步步演化而来,这次的实践使我对于后端开发有了初步的认识,为我完成青训营大作业提供了良好的基础模范