一、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")
}