我本来Http的请求方式和数据请求格式是大家开发过程中都默认知道的事情,直到我发现我的前端竟然不知道表单请求的时候,我觉得我有必要跟大家一起来讨论一下这个话题了。有可能我的前端小伙伴在学习的时候一开始就入手现在比较流行的前端框架如Vue、React等,他们已经习惯了请求方式用POST,GET,然后请求格式用application/json,不知道原来除了这些常用的,还有其他的一些请求问题。
很多人不太知道请求方式
跟数据的请求格式
,反正我遇到几个前端,好像一开始都不是很清楚,每次都要解释上好几遍,他们才知道原来还有这么一回事。接下来我就简要的用我自己的理解来说一下这两个东西,如果觉得说错了的可以在评论里指出来一下,感谢小伙伴们了。
先仔细看我下面说的小故事,给大家一个大概的认知。
小明今天拿着一袋自家种的花生坐车去镇上,准备把这袋花生寄到外地远方的表哥家里。一到镇上他懵了,现在发展这么快么?怎么寄个东西也这么多快递选择,什么中通,圆通,韵达啥的。最终他选择了中通,走进中通的寄件点之后他又懵了,啥情况,寄个东西咋还有这么多运送方式,什么陆运,水运,空运的,思考再三后他还是选择了陆运,把花生寄到了表哥家里。
我们从这个故事里可以看出寄快递的两个特点,一个是寄快递时选择什么品牌寄,一个是寄快递通过什么寄运方式。而我们请求后端接口的时候也是一样,将请求参数运送到后台接口能被它正确识别也得有两个比较重要的参数就是请求方式和请求格式。而小明其实可以进行排列组合,比如(中通,陆运)、(中通,水运)、(中通,空运)、(圆通,陆运)、(圆通,水运)、(圆通,空运)…等等,而我们的请求方式和请求格式其实也是这样的,任意组合,就看后端他是怎么定义接收这些数据。
请求方式
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式
其中:
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
我们最常用的无非是 GET跟POST请求,有些遵循Restful开发风格的还会用到 PUT和DELETE
GET
: 顾名思义是获取的意思,一般用来查询接口的使用,很少对数据有进行操作的接口用GET,不是不行而是很少这么看见有人这么用。它的特点就是请求参数会在URL的尾部?
之后以&
拼接。
比如: https://blog.csdn.net/javaboyweng?spm=1001.2101.3001.5343
,所以早期GET请求其实是认为没有请求体的,请求参数就是拼接在URL的后面没的商量。
POST
:有发布,交付的意思,一般用来做除查询之外的接口使用(少数情况的查询用这个也很适合,如查询条件非常多的时候),Restful开发风格中会用来做新增
,因为GET方式参数暴露在URL后面比较危险,所以POST方式的时候,请求方式是放在请求体里的,正常通过浏览器上的URL地址你是看不到参数长啥样的。我相信没人开发登录界面的时候会使用GET请求吧。
PUT
: Restful开发风格的时候用,一般用来做修改
。
DELETE
:Restful开发风格的时候用,一般用来做删除
。
请求格式
这里我就说常用的三个数据请求格式,其他的小伙伴们有兴趣可以去了解一下。
这里说的数据请求格式其实就是 请求头中的 Content-Type
属性了。常用的有如下三个,
-
application/x-www-form-urlencoded
:表单请求
,不得不说这个很多前端都不知道,因为现在默认框架请求都是application/json
了,这个东西可比application/json
出来的早,当初它流行的时候,application/json
都不知道有没有从娘胎里出来。表单请求的特点就是在请求体中是以&
拼接的,有点像GET那个但是它是藏起来的,通常配合POST使用。例如 name=zhangsan&age=1 -
application/json
:json请求
,这个就是前端常用的一个数据请求格式,json请求的出现大大弥补了表单请求不能表达多层级的数据结构,并且可读性上来说非常好。例如:
{
"name":"zhangsan",
"age":24,
"hobby":["唱","跳","Rap"],
"son":{
"name":"张小三",
"age":"1"
}
}
这种结构表单请求只能说臣妾做不到啊,要做到也得灰常曲折丫
。
multipart/form-data
:多部件请求
,一般这个请求格式会在文件上传的时候使用,就是通常对接后端的上传接口的时候会使用到,例如前端会有这种代码,
var formData = new FormData();
formData.add("file",文件)
formData.add("name","这是另外的参数")
Restful
这里我不多说Resultful是啥玩意,它就是有一个博士提出来的一个规范,你开发的时候如果经理没啥要求的情况下,你爱怎么做怎么做。我下面的例子写一下你就领悟了。由于上面我们说到 请求方式跟请求格式是可以互相组合的
- 以前风格开发
http://127.0.0.1:8080/user/list 查询用户列表, GET请求
http://127.0.0.1:8080/user/add 添加用户,POST请求
http://127.0.0.1:8080/user/edit 修改用户,POST请求
http://127.0.0.1:8080/user/del 删除用户,POST请求
- Restful风格开发
http://127.0.0.1:8080/user 查询用户列表, GET请求
http://127.0.0.1:8080/user 添加用户,POST请求
http://127.0.0.1:8080/user 修改用户,PUT请求
http://127.0.0.1:8080/user 删除用户,DELETE请求
你会猛的发现,以前开发如果只用了GET、POST请求方式的话,那么对于增删改查四个常规接口来说,就得把动词放在URL路径上去体现。而如果使用Restful
风格的话,URL都是一样的路径,通过请求方式来控制增删改查,就这么一回事其他也没啥,还是那句话,看自己咋开发。没有谁对谁错,能提高开发效率,团队协作顺利才是最重要的。
一定要跟后端对接的时候看清楚接口文档上用的什么请求方式,POST还是GET等等,另外看一下到底是什么数据请求格式 是表单请求,还是json请求等等