语境
我有一个 REST API,其中多个客户端(应用程序)可以使用 PUT 更新资源的状态。例如,此资源是您可以打开ON
或的灯OFF
。
当检测到发生电力故障时,系统也会自动更新此资源,从而导致灯处于BROKEN
状态。我要区分BROKEN
和OFF
,一盏灯BROKEN
不能转动ON
!
问题
我使用PUT
方法来做到这一点,比如PUT http://address:port/my_lamp { "state": "ON"}
但我不确定我是否尊重PUT
方法的幂等性。事实上,我有3个案例:
- 灯是
ON
。上面的代码导致ON
状态。 - 灯是
ON
。上面的代码导致ON
状态....酷!此时,幂等性仍然得到保证:-)! - 灯是
BROKEN
。上面的代码会导致错误,比如503 Service Unavailable
问题
我不确定是否正确理解幂等性的概念。相信我,我读了很多关于它的东西,但仍然有点困惑。
在我的理解中,多个PUT
总是导致资源的相同状态:在我的情况下不能保证,因为BROKEN
但我也可以用另一种方式理解它:多重PUT
总是导致相同的副作用:保证,我的请求要么产生 turn ON
,要么什么都没有(对于这种BROKEN
情况,它已经存在)。
编辑:
我的意思是:唯一的副作用是打开灯ON
,这是有保证的(它要么打开,要么在这里什么都不做)
哪一个是正确的?根据理解,我的 REST API 是否确保幂等性......
编辑2:
从W3C的定义方法还可以具有“幂等性”,因为(除了错误或过期问题)N > 0 个相同请求的副作用与单个请求相同。
我可以认为打开灯是错误ON
的BROKEN
吗?