一、RESTful API是什么
REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”,通俗一点的话就是RESTful是一种风格,通过四个HTTP动词GET,POST,PUT,DELETE对服务器资源进行操作,用传统API和RESTful API做个对比图:
传统请求方式 传统URL RESTful 请求方式 RESTful URL 描述说明
GET /user GET /user 查询用户信息
POST /create_user POST /user 创建用户信息
POST /update_user PUT /user 更新用户信息
POST /delete_user DELETE /user 删除用户信息
可以看出同一类的都用的一个url,只是请求方式不同
二、获取参数
1.获取QueryString参数
一般是指请求中?后的参数,比如/user?username=小草:
func main() {
r := gin.Default()
r.GET("/user", func(c *gin.Context) {
username := c.Query("username") // 如果没有,则返回""
//username := c.DefaultQuery("username", "小草") // 如果没有,则返回默认值"小草"
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"username": username,
})
})
r.Run(":8080")
}
2.获取Form参数
指前端通过from表单提交而来的请求数据 username: "小草",比如:
func main() {
r := gin.Default()
r.POST("/user", func(c *gin.Context) {
username := c.PostForm("username")
//username := c.DefaultPostForm("username", "小草") // DefaultPostForm取不到值时会返回指定的默认值
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"username": username,
})
})
r.Run(":8080")
}
3.获取Path参数
指请求的数据在URL路径中,比如/user/小草:
func main() {
//Default返回一个默认的路由引擎
r := gin.Default()
r.GET("/user/:username", func(c *gin.Context) {
username := c.Param("username") //URL中的小草对应的-> username
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"username": username,
})
})
r.Run(":8080")
}
4.使用ShouldBind()
自动提取QueryString、form表单、JSON、XML等参数到结构体中
func main() {
r := gin.Default()
// 绑定JSON的示例 ({"username": "小草"}),form表单示例 (username:小草)
r.POST("/user", func(c *gin.Context) {
var user User
if err := c.ShouldBind(&user); err == nil {
c.JSON(http.StatusOK, gin.H{
"username": user.UserName,
})
} else {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
})
// 绑定QueryString示例 (/user?username=小草)
r.GET("/user", func(c *gin.Context) {
var user User
// ShouldBind()会根据请求的Content-Type自行选择绑定器
if err := c.ShouldBind(&user); err == nil {
c.JSON(http.StatusOK, gin.H{
"username": user.UserName,
})
} else {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
})
r.Run(":8080")
}