前言
感谢开源项目gin-vue-admin,以及1010工作室的教程,项目文档
我只是在跟着学习,然后记录下笔记而已,可能会有新的代码加入,但是本质还是跟着学习的一个过程。
修改端口号
重新看一下上一篇中写的示例程序
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default() //启动gin路由,携带基础中间件启动
//让启动的路由接收get请求,且是/ping,运行一个匿名函数,将gin的上下文传入
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{ //将接收的信息返 回
"message": "pong",
})
})
r.Run()
}
可以发现最后是由Run()函数将服务运行起来的,所以在执行Run()时,可以更改端口号,例如这里如果使用端口号1010的话,只需要将1010传入Run()函数中。
r.Run(":1010")
这时重新运行程序,再用postman去进行请求,可以发现依然拿到了正确结果,说明已经可以通过1010接口访问到数据。
此时在代码中将所有的请求都定义出来:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default() //启动gin路由,携带基础中间件启动
r.GET("/path/:id", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.POST("/path", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.DELETE("/path/:id", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.PUT("/path", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run(":1010") // listen and serve on 0.0.0.0:8080
}
GET
get请求可以在网址中看见所携带的参数,即参数在url和uri中进行挂载。
URL:Uniform Resource Locator 统一资源定位符;
URI:Uniform Resource Identifier 统一资源标识符;
URL: 关键词-“资源定位”, 那就是通过写明路径的方式,表示出资源的位置,位置被指定,通常资源也就被指定,例如302班1列3排的同学,身份是能够被确定的。
URI: 关键词-“资源标识”, 一个名为小明的男同学。我们明确的知道了,有这么个人,性别男,名小明。
修改代码
然后再将GET中的修改下,
r.GET("/path/:id", func(c *gin.Context) {
//将请求中的参数拿出来
id := c.Param("id")
user := c.Query("user")
pwd := c.Query("pwd")
c.JSON(200, gin.H{
"id": id,
"user": user,
"pwd": pwd,
})
})
这里利用Param将请求中的地址栏的id(这里是123提取出来),和用Query将后面的参数user和pwd提取出来,然后将这三个参数返回
可以看见,postman中发起的请求已经拿到的了正确的请求返回。
这里如果请求中没有给用户名或者pwd,那么服务端是无法解析到对应参数的,所以返回中也将是空白。
其中Query是读取参数,当这个参数没有时给空,DefaultQuery是读取参数,当这个参数没有时给一个指定的默认值。
POST
参数在form中 、body中,或者在uri中
form是一种表单的形式提供给后台
body是常用的json进行交互
将post部分重写
r.POST("/path", func(c *gin.Context) {
user := c.DefaultPostForm("user", "qqyking")
pwd := c.PostForm("pwd")
c.JSON(200, gin.H{
"user": user,
"pwd": pwd,
})
})
在postman中构建post请求
开始时也曾尝试url中带参数,然后使用post请求访问,但是都失败了。
其中PostForm是读取参数,当这个参数没有时给空,DefaultPostForm是读取参数,当这个参数没有时给一个指定的默认值。
DELETE
一般情况为uri,同样也可以为body
用法和GET基本相同,但是不同的是它也可以从body内取参数
然后重写DELETE
r.DELETE("/path/:id", func(c *gin.Context) {
id := c.Param("id")
c.JSON(200, gin.H{
"id": id,
})
})
然后在postman中构建DELETE请求
PUT
参数在form body或者uri中
将put部分重写
r.PUT("/path", func(c *gin.Context) {
user := c.DefaultPostForm("user", "qqyking")
pwd := c.PostForm("pwd")
c.JSON(200, gin.H{
"user": user,
"pwd": pwd,
})
})
在postman中构建put请求
可以看出POST和PUT用法是一摸一样的,只不过请求的方式不同
如此一来就通过GIN的接口实现了增删改查
最后完整代码示例
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件
r.GET("/path/:id", func(c *gin.Context) {
//将请求中的参数拿出来
id := c.Param("id")
user := c.Query("user")
pwd := c.DefaultQuery("pwd", "123456")
c.JSON(200, gin.H{
"id": id,
"user": user,
"pwd": pwd,
})
})
r.POST("/path", func(c *gin.Context) {
user := c.DefaultPostForm("user", "qqyking")
pwd := c.PostForm("pwd")
c.JSON(200, gin.H{
"user": user,
"pwd": pwd,
})
})
r.DELETE("/path/:id", func(c *gin.Context) {
id := c.Param("id")
c.JSON(200, gin.H{
"id": id,
})
})
r.PUT("/path", func(c *gin.Context) {
user := c.DefaultPostForm("user", "qqyking")
pwd := c.PostForm("pwd")
c.JSON(200, gin.H{
"user": user,
"pwd": pwd,
})
})
r.Run(":1010") // listen and serve on 0.0.0.0:8080
}