在前后端分离的最为常见的软件开发过程中,http的RESTFUL API成为了其中最为重要的桥梁,所以学习HTTP的一些方法也是后端开发的必备知识点。
HTTP方法就像后端取出数据然后提供API给前端,让前端根据这个API地址去取所需的数据,并且不同的数据根据不同的方法去取。
幂等性
幂等是从数学引入的术语,表示某个元素经过多少次特定的运算之后结果仍然不变。
所以假设双十一网站访问量突然增加,不少人点支付按钮会点两三下,那么,怎么保证这两下触发的事件只发生一次呢,这里就被定义为幂等性,意思为同样的操作不管执行多少次都不会影响系统状态的请求。
在HTTP方法中,GET
,HEAD
,PUT
,DELETE
是幂等的
所以在HTTP方法中,有些请求肯定是需要保证幂等性的,所以有些方法满足幂等性,有些不满足,根据需求进行选择。
安全方法
RFC提出了一个安全方法的概念,简单来说任何只读方法都应该属于安全方法,服务器收到标明为这些方法的请求不应该导致其资源状态上的改变,或者产生任何副作用。一般而言GET,HEAD,OPTIONS,TRACE都属于安全方法
常用的HTTP方法
GET
一般是请求固定或者说已有的资源,比如访问某个网站的hem文件:page.com/index.htm或者访问某个网站的固定资源page.com/download/down.exe。
GET主要关于于传输性能上的优化,通常大家所说的获取一些资源/页面/信息,默认都是用GET方法来执行
HEAD
于GET方式基本一致,都是用于传输资源或者信息的,但是HEAD只传输头部,不需要传输消息正文,也就是说用HEAD和GET访问同一个资源,GET的头部其实就是HEAD,所以HEAD常用于检测某个资源是否存在,只需要返回较小的头部就好了
POST
POST不具备幂等性,向执行的资源提交数据请求,比如提交申请表单或者上传文件,所以POST从一定程度上来说可以看成是数据库的ADD操作
对于POST操作,HTTP服务器应当选择合适的HTTP状态码来作为POST的返回码,比如正常的200,201等, POST既不安全也不是幂等的
PUT
PUT常用来更新现有资源(如果资源不存在,则API可能决定是否创建新资源,如果PUT创建新资源,源服务器需要返回HTTP状态码201(created)
客户端,如果修改成功,那么返回200(OK)
或者204(not content only head)
给客户端,以指示请求成功完成
PATCH
PATCH是对PUT的补充,PUT是针对一整个资源,PATCH可以更新某个资源里面的一部分信息,比如用户的id,等细节类的信息
PUT在针对的单个资源不存在的时候有点类似POST操作,如果资源存在的话,PUT操作就是我们熟悉的Update操作
DELETE
DELETE就很好理解了,就是删除某个资源,
一般HTTP服务器对于DELETE请求返回的状态码
- 200(OK)如果对于该请求有相应的描述请求体的话,
- 202(Accepted)请求已经被接收,但是还没处理,可能在排队等候,
- 204(No Content)如果操作成功,但是没有相应的描述体,就返回204,和200相似
DELETE操作是幂等的,如果重复删除某个资源,第二次开始的操作不会发生改变,并且会返回404的状态码
现在常用的代码注释自动生成API接口描述是Swagger
有兴趣的可以去了解一下。