幂等
如果同样的请求被执行一次与连续执行多次,对服务器的预期影响是相同的,那么称这个 HTTP 方法是幂等的。
这不意味着请求不会有任何副作用,比如,服务器可能会对所有请求做记录。幂等性只针对客户端所希望的效果而言:比如,一个 POST 请求期望将数据发给服务器,或一个 DELETE 请求期望在服务器上删除某个资源。
所有的安全方法也都是幂等的,包括 PUT
和 DELETE
。而 POST
方法不是幂等的。
幂等性只考虑服务器的状态。每次请求返回的响应可能不同:例如,第一次调用 DELETE
可能会返回 200
,而后续的调用可能会返回 404
。DELETE
具有幂等性的另外一层含义是,开发者不应该使用 DELETE
方法实现 RESTful API 的删除最后一个条目功能。
需要注意的是,方法的幂等性并不是由服务器保证的,有些应用程序可能会错误地破坏幂等性的约束。
GET /pageX HTTP/1.1
是幂等的,因为它是一个安全(只读)方法。如果服务器上的数据在此期间被更新,连续调用可能会返回不同的数据给客户端:
POST /add_row HTTP/1.1
不是幂等的。如果调用多次,就会增加多行记录:
http
POST /add_row HTTP/1.1
POST /add_row HTTP/1.1 -> 新增第二行内容
POST /add_row HTTP/1.1 -> 新增第三行内容
DELETE /idX/delete HTTP/1.1
是幂等的,即使返回的状态代码在不同请求之间可能会发生变化:
http
DELETE /idX/delete HTTP/1.1 -> 返回 200,如果 idX 存在
DELETE /idX/delete HTTP/1.1 -> 返回 404,因为已经被删掉了
DELETE /idX/delete HTTP/1.1 -> 返回 404