gin框架学习-HTTP请求

简介: POST 请求的参数一般通过 body 传递给服务器. body 中的数据格式有很多种。

前言


感谢开源项目gin-vue-admin,以及1010工作室的视频教程

本人学识尚浅,如有错误,请评论指出,谢谢!

详细可见个人博客:https://linzyblog.netlify.app/

一、HTTP请求类型


http协议中一共定义了八种方法或者称之为类型来表明对请求网络资源(Request-URI)的不同的操作方式,分别是:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT。


请求 内容
GET 请求指定的页面信息,并返回实体主体。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。
DELETE 请求服务器删除指定的页面。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。


HTTP 提供了丰富的状态码供我们使用,正确的使用状态码可以让响应数据更具可读性。


  • 200 OK - 对成功的 GET、PUT、PATCH 或 DELETE 操作进行响应。也可以被用在不创建新资源的 POST 操作上


  • 201 Created - 对创建新资源的 POST 操作进行响应。应该带着指向新资源地址的 Location 头


  • 202 Accepted - 服务器接受了请求,但是还未处理,响应中应该包含相应的指示信息,告诉客户端该去哪里查询关于本次请求的信息


  • 204 No Content - 对不会返回响应体的成功请求进行响应(比如 DELETE 请求)


  • 304 Not Modified - HTTP 缓存 header 生效的时候用


  • 400 Bad Request - 请求异常,比如请求中的 body 无法解析


  • 401 Unauthorized - 没有进行认证或者认证非法


  • 403 Forbidden - 服务器已经理解请求,但是拒绝执行它


  • 404 Not Found - 请求一个不存在的资源


  • 405 Method Not Allowed - 所请求的 HTTP 方法不允许当前认证用户访问


  • 410 Gone - 表示当前请求的资源不再可用。当调用老版本 API 的时候很有用


  • 415 Unsupported Media Type - 如果请求中的内容类型是错误的


  • 422 Unprocessable Entity - 用来表示校验错误


  • 429 Too Many Requests - 由于请求频次达到上限而被拒绝访问


在开始动手操作之前,需要先下载postman


网下载网址:https://www.postman.com/downloads/

二、GET请求


GET请求可以看见网址中所携带的参数,参数挂载在URI和URL。


  • URI和URL的区别:https://blog.csdn.net/weixin_55635621/article/details/123681394


r := gin.Default() //携带基础中间件启动
  r.GET("/path/:id", func(c *gin.Context) {
    //返回URL参数的值
    id := c.Param("id")
    //查询它存在,返回键url查询值,
    //否则返回空字符串
    user := c.Query("user")
    pwd := c.Query("pwd")
    //JSON将给定的结构序列化为JSON到响应体中。
    //它还设置Content-Type为“application/json”。
    c.JSON(200, gin.H{
      "success": true,
      "id":      id,
      "user":    user,
      "pwd":     pwd,
    })
  })
r.Run(":8080") // listen and serve on 0.0.0.0:8080


这里利用Param将请求中的地址栏的id(这里是123提取出来),和用Query将后面的参数user和pwd提取出来,然后将这三个参数返回,我们成功获取到网址上的参数了!


814c28f585b24be19b0c3b83cd3a9288.png

b53417b7760945efa1950e1b4a7c2bf6.png


  • 这个时候就有个问题了,如果我们的请求里面恰好没有给user或pwd,会怎么样?


d057e26a633e42b0b3cb575b4b355695.png


我们发现缺少的这一项直接为空。


这个时候我们可以用DefaultQuery方法。


  • DefaultQuery:如果存在,DefaultQuery返回键控url查询值,否则返回指定的defaultValue字符串。


user := c.DefaultQuery("user", "linzy") // 此方法可以设置默认值


postman访问:http://localhost:8080/path/123?pwd=123456


000f685962a84c62ac17d4ccc6a731e4.png


三、POST请求


POST 请求的参数一般通过 body 传递给服务器. body 中的数据格式有很多种。


  • 表单参数可以通过PostForm()方法获取,该方法默认解析的是x-www-form-urlencoded或from-data格式的参数


r := gin.Default() //携带基础中间件启动
r.POST("/path", func(c *gin.Context) {
    user := c.DefaultPostForm("user", "linzy")
    //PostForm从POST url编码表单或多部分表单返回指定的键值
    pwd := c.PostForm("pwd")
    c.JSON(200, gin.H{
      "success": true,
      "user":    user,
      "pwd":     pwd,
    })
  })
r.Run(":8080") // listen and serve on 0.0.0.0:8080


postman访问:http://localhost:8080/path


f1c14752f2b54f80bf57736496e998cf.png


四、DELETE请求


DELETE请求参数挂载在URI,用法与GET请求一样。


r := gin.Default() //携带基础中间件启动
r.DELETE("/path/:id", func(c *gin.Context) {
    id := c.Param("id")
    c.JSON(200, gin.H{
      "id": id,
    })
  })
r.Run(":8080") // listen and serve on 0.0.0.0:8080


postman访问:http://localhost:8080/path/linzy


56be817a942645b482c2211423d7347c.png


五、PUT请求


PUT请求与POST请求用法一样,参数一般通过 body 传递给服务器. body 中的数据格式有很多种。


r := gin.Default() //携带基础中间件启动
r.PUT("/path", func(c *gin.Context) {
    user := c.DefaultPostForm("user", "linzy")
    pwd := c.PostForm("pwd")
    c.JSON(200, gin.H{
      "success": true,
      "user":    user,
      "pwd":     pwd,
    })
  })
r.Run(":8080") // listen and serve on 0.0.0.0:8080


postman访问:http://localhost:8080/path/linzy


658792b4c7b741efa4fc6f1fee73339d.png

目录
相关文章
|
2月前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
178 3
|
5天前
|
缓存 应用服务中间件 Apache
HTTP 范围Range请求
HTTP范围请求是一种强大的技术,允许客户端请求资源的部分内容,提高了传输效率和用户体验。通过正确配置服务器和实现范围请求,可以在视频流、断点续传下载等场景中发挥重要作用。希望本文提供的详细介绍和示例代码能帮助您更好地理解和应用这一技术。
45 19
|
1月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
86 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
13天前
|
JSON JavaScript 前端开发
什么是HTTP POST请求?初学者指南与示范
HTTP POST请求是一种常用的HTTP方法,主要用于向服务器发送数据。通过合理设置请求头和请求主体,可以实现数据的可靠传输。无论是在客户端使用JavaScript,还是在服务器端使用Node.js,理解和掌握POST请求的工作原理和应用场景,对于Web开发至关重要。
136 18
|
12天前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
54 2
|
30天前
|
Web App开发 大数据 应用服务中间件
什么是 HTTP Range请求(范围请求)
HTTP Range 请求是一种非常有用的 HTTP 功能,允许客户端请求资源的特定部分,从而提高传输效率和用户体验。通过合理使用 Range 请求,可以实现断点续传、视频流播放和按需加载等功能。了解并掌握 HTTP Range 请求的工作原理和应用场景,对开发高效的网络应用至关重要。
66 15
|
1月前
|
数据采集 JSON 测试技术
Grequests,非常 Nice 的 Python 异步 HTTP 请求神器
在Python开发中,处理HTTP请求至关重要。`grequests`库基于`requests`,支持异步请求,通过`gevent`实现并发,提高性能。本文介绍了`grequests`的安装、基本与高级功能,如GET/POST请求、并发控制等,并探讨其在实际项目中的应用。
44 3
|
2月前
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
34 5
|
2月前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
53 3
|
2月前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现