首页>>后端>>Golang->Gin框架 RESTful API & 参数获取

Gin框架 RESTful API & 参数获取

时间:2023-11-29 本站 点击:0

一、RESTful API是什么

REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”,通俗一点的话就是RESTful是一种风格,通过四个HTTP动词GET,POST,PUT,DELETE对服务器资源进行操作,用传统API和RESTful API做个对比图:

传统请求方式传统URLRESTful 请求方式RESTful URL描述说明GET/userGET/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()

自动提取QueryStringform表单JSONXML等参数到结构体中

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"`}

作者:小小小丶叶子著作权归作者所有。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Golang/229.html