写在前面
以文字资源为例学习四大请求方式
GET: 从服务器取出资源(一项或多项)
POST: 在服务器新建一个资源
PUT: 在服务器更新资源(客户端提供完整资源数据)
PATCH: 在服务器更新资源(客户端提供需要修改的资源数据)
DELETE: 从服务器删除资源
好像是五大请求方式… 不过没有用到PATCH
1 2 3 4 5 6
| 请求方式 请求内容 说明 GET /articles 文章列表 GET /articles/:id 文章详情 POST /articles 添加文章 PUT /articles/:id 修改某一篇文章 DELETE /articles/:id 删除某一篇文章
|
导入相应的包
1 2 3 4 5 6 7 8
| package main
import ( "encoding/json" "fmt" "github.com/gin-gonic/gin" "net/http" )
|
自定义需要的结构体
1 2 3 4 5 6 7 8 9 10 11 12
| type ArticleModel struct { Title string `json:"title"` Content string `json:"content"` }
type Response struct { Code int `json:"code"` Date any `json:"date"` Message string `json:"msg"` }
|
文章列表
1 2 3 4 5 6 7 8 9
| func _getList(arg *gin.Context) { list := []ArticleModel{ {"go语言入门", "本书是go语言入门基础"}, {"c语言入门到入土", "本书是c语言入门教程,面向入土"}, {"数据库从删库到跑路", "本书教你如何从删库到跑路"}, } arg.JSON(200, Response{http.StatusOK, list, "响应成功"}) }
|
- postman响应截图:
文章详情
1 2 3 4 5 6 7 8 9 10 11
| func _getDetails(arg *gin.Context) { book_id := arg.Param("id") fmt.Printf("获取到id: %v\n", book_id) article := ArticleModel{ "c语言入门到入土", "本书是c语言入门教程,面向入土", }
arg.JSON(http.StatusOK, gin.H{"id": book_id, "response": Response{http.StatusOK, article, "响应成功"}}) }
|
- postman响应截图:
创建文章 和 修改文章
这俩放一起了,因为用到同一个函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| func _bindJson(arg *gin.Context, obj any) (err error) { body, _ := arg.GetRawData()
contentType := arg.GetHeader("Content-Type")
fmt.Println(string(contentType))
switch contentType { case "application/json":
err := json.Unmarshal(body, &obj) if err != nil { fmt.Println(err) return err } default: fmt.Println(":D") } return nil }
func _post(arg *gin.Context) { var article ArticleModel
err := _bindJson(arg, &article) if err != nil { panic(err) }
arg.JSON(http.StatusOK, Response{http.StatusOK, article, "创建成功"}) }
func _put(arg *gin.Context) { fmt.Printf("获取到id: %v\n", arg.Param("id"))
var article ArticleModel err := _bindJson(arg, &article) if err != nil { panic(err) }
arg.JSON(200, Response{http.StatusOK, article, "修改成功"}) }
|
postman响应截图:
创建文章
修改文章
-
删除文章
1 2 3 4 5 6 7 8
| func _delete(arg *gin.Context) { fmt.Printf("获取到id: %v\n", arg.Param("id"))
arg.JSON(200, Response{http.StatusOK, "", "删除成功"})
}
|
- postman响应截图:
- 删除文章
删除后只需要返回一个删除成功的提示,没别的东西,所以很空,==实际开发还需要对数据库进行操作…==
main函数
1 2 3 4 5 6 7 8 9 10 11 12 13
| func main() { router := gin.Default() router.GET("/articles/", _getList) router.GET("/articles/:id", _getDetails) router.POST("/articles/", _post) router.PUT("/articles/:id", _put) router.DELETE("/articles/:id", _delete)
err := router.Run(":80") if err != nil { return } }
|
写在最后
在写这篇博客的时候很晚了,我听到楼下几个少年大声唱着《海阔天空》。暑假里,几个好朋友一起喝,喝到很晚回家路上一路高歌,放肆的享受着年轻的自己……
我应该也有这样放飞自我的时候,但是已经记不太清了。我把这事告诉朋友。他说,给他一笔钱他也海阔天空🤣🤣
over~