Gin四大请求方式实践 | 青训营

129 阅读3分钟

gin四大请求方式实践——小型文章资源管理

1. RestFul风格介绍

RestFul风格 四大请求方式:

  1. GET,表示获取服务器上的资源
  2. POST,表示在服务器上创建资源
  3. PUT,表示更新或者替换服务器上的资源
  4. 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阶段测试

1.png

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.png

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阶段测试

3.png

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阶段测试

4.png

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阶段测试

5.png

3. 实践总结

通过这次制作一个小型文章资源管理系统, 我学会了如何处理简单的后端业务,包括但不限于:

  • 在写代码前梳理清楚各个业务所需要的接口和请求方式
  • 简单的代码接口布局和管理流程
  • 如何能够方便接口代码封装和后期维护
  • RestFul风格的各个请求方式的应用场景和简单实现

每一个大型项目都是由简单的项目一步步演化而来,这次的实践使我对于后端开发有了初步的认识,为我完成青训营大作业提供了良好的基础模范