当前位置:网站首页>GIN中GET POST PUT DELETE请求
GIN中GET POST PUT DELETE请求
2022-08-09 12:44:00 【一叶知秋@qqy】
前言
感谢开源项目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
}
边栏推荐
- The batch size does not have to be a power of 2!The latest conclusions of senior ML scholars
- ABAP interview questions: how to use the System CALL interface of the ABAP programming language, direct execution ABAP server operating System's shell command?
- read stream 特别注意
- 第六届“强网杯”全国网络安全挑战赛
- JVM之配置介绍(一)
- MySQL5.6到8.0的账号迁移
- 造自己的芯,让谷歌买单!谷歌再度开源 180nm 工艺的芯片
- MySQL备份与恢复 (转载非原创)
- 二维数组&指针
- 手写大根堆
猜你喜欢
Flutter入门进阶之旅(四)文本输入Widget TextField
Say goodbye to the AI era of hand looms
How to upload local file trial version in binary mode in ABAP report
我的2020年终总结
26. Pipeline parameter substitution command xargs
第六届”蓝帽杯“全国大学生网络安全技能大赛 半决赛
ansible-cmdb友好展示ansible收集主机信息
链表噩梦之一?5000多字带你弄清它的来龙去脉
Go 事,如何成为一个Gopher ,并在7天找到 Go 语言相关工作,第1篇
Resolved IndentationError: unindent does not match any oute r indentation Level
随机推荐
MySQL principle and optimization of Group By optimization techniques
Flutter Getting Started and Advanced Tour (8) Button Widget
Flutter入门进阶之旅(四)文本输入Widget TextField
无重复字符的最长子串
关于Retrofit网络请求URL中含有可变参数的处理
Intranet penetration tool ngrok usage tutorial
在已打开图片上加水印(文字)
Flutter introduction advanced trip (5) Image Widget
Simple encapsulation of glide tool class
生成上传密钥和密钥库
FPGA-近日工作总结
ftplib+ tqdm 上传下载进度条
单面线路板与精密多层PCB线路板区别有哪些?
Flutter入门进阶之旅(七)GestureDetector
JVM之配置介绍(一)
Jenkins API groovy调用实践: Jenkins Core Api & Job DSL创建项目
FFmpeg compiles and installs on win10 (configure libx264)
Redis源码剖析之字典(dict)
流量焦虑背后是企业对客户关系管理的不足
5G China unicom general exception handling