Restful风格值得是网络应用中就是资源定位和资源操作的风格。不是标准也不是协议
GET:从服务器取出资源(一项或多项)
POST:在服务器新建一个资源
PUT:在服务器更新资源(客户端提供完整资源数据)
PATCH:在服务器更新资源(客户端提供需要修改的资源数据)
DELETE:从服务器删除资源
go
package main
import (
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
)
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"`
}
func _bindJson(c *gin.Context, obj any) (err error) {
data, _ := c.GetRawData()
contentType := c.GetHeader("Content-Type")
switch contentType {
case "application/json":
//fmt.Println(string(data))
err := json.Unmarshal(data, obj)
if err != nil {
fmt.Println(err.Error)
return err
}
}
return nil
}
// 文章列表
func _getList(c *gin.Context) {
articleList := []ArticleModel{
{"Go语言入门", "这篇文章是《Go语言入门》"},
{"python语言入门", "这篇文章是《python语言入门》"},
{"JavaScript语言入门", "这篇文章是《JavaScript语言入门》"},
}
c.JSON(200, Response{0, articleList, "成功"})
}
// 文章详情
func _getDetail(c *gin.Context) {
article := ArticleModel{
"Go语言入门", "这篇文章是《Go语言入门》",
}
//获取param中的id
fmt.Println(c.Param("id"))
c.JSON(200, Response{0, article, "成功"})
}
// 添加文章
func _create(c *gin.Context) {
//接受前端传递过来的json数据
var article ArticleModel
err := _bindJson(c, &article)
if err != nil {
fmt.Println(err)
return
}
c.JSON(200, Response{
Code: 0,
Data: article,
Msg: "添加成功",
})
fmt.Println(111)
}
// 编辑文章
func _update(c *gin.Context) {
fmt.Println(c.Param("id"))
var article ArticleModel
err := _bindJson(c, &article)
if err != nil {
fmt.Println(err)
return
}
c.JSON(200, Response{0, article, "修改成功"})
}
// 删除文章
func _delete(c *gin.Context) {
fmt.Println(c.Param("id"))
c.JSON(200, Response{0, map[string]string{}, "删除成功"})
}
func main() {
router := gin.Default()
router.GET("/articles", _getList) //文章列表
router.GET("/articles/:id", _getDetail) //文章详情
router.POST("/articles/", _create) //添加文章
router.PUT("/articles/:id", _update) //编辑文章
router.DELETE("/articles/:id", _delete) //删除文章
router.Run(":8080")
}