一、RESTful API是什么
REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”,通俗一点的话就是RESTful是一种风格,通过四个HTTP动词GET,POST,PUT,DELETE对服务器资源进行操作,用传统API和RESTful API做个对比图:
RESTful 请求方式
RESTful URL
GET
/user
查询用户信息POST/create_userPOST
/user
创建用户信息POST/update_userPUT
/user
更新用户信息POST/delete_userDELETE
/user
删除用户信息可以看出同一类的都用的一个url,只是请求方式不同。
二、获取参数
1.获取QueryString参数
一般是指请求中?后的参数,比如/user?username=小草
:
funcmain(){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: "小草"
,比如:
funcmain(){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/小草
:
funcmain(){//Default返回一个默认的路由引擎r:=gin.Default()r.GET("/user/:username",func(c*gin.Context){username:=c.Param("username")//URL中的小草对应的->usernamec.JSON(http.StatusOK,gin.H{"message":"ok","username":username,})})r.Run(":8080")}
4.使用ShouldBind()
自动提取QueryString
、form表单
、JSON
、XML
等参数到结构体中
funcmain(){r:=gin.Default()//绑定JSON的示例({"username":"小草"}),form表单示例(username:小草)r.POST("/user",func(c*gin.Context){varuserUseriferr:=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){varuserUser//ShouldBind()会根据请求的Content-Type自行选择绑定器iferr:=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")}
注:使用ShouldBind需要注意一点,结构体需要用tag注解
typeUserstruct{Usernamestring`form:"username"json:"username"binding:"required"`}
作者:小小小丶叶子著作权归作者所有。