【发布时间】:2015-08-25 23:01:37
【问题描述】:
上下文
我有一个 REST API,其中多个客户端(应用程序)可以使用 PUT 更新资源的状态。例如,此资源是一个可以打开ON 或OFF 的灯。
当系统检测到发生电力故障时,系统也会自动更新此资源,导致灯处于BROKEN 状态。我要区分BROKEN和OFF,BROKEN里的灯不能转ON!
问题
我使用<b>PUT</b> 方法来执行此操作,例如<b>PUT</b> @987654321@ { "state": "ON"}
但我不确定我是否尊重<b>PUT</b> 方法的幂等属性。
其实我有3个案例:
- 灯是
ON。上面的代码导致ON状态。 - 灯是
ON。上面的代码导致ON状态....酷!此时,幂等性仍然得到保证:-)! - 灯是
BROKEN。上面的代码会导致错误,比如503 Service Unavailable
问题
我不确定是否正确理解幂等性的概念。相信我,我读了很多关于它的东西,但还是有点困惑。
据我了解,多个<b>PUT</b> 总是导致资源的相同状态:由于BROKEN,在我的情况下无法保证
但我也可以用另一种方式理解它:多个<b>PUT</b> 总是导致相同的副作用:保证,我的请求要么产生转为ON,要么什么都没有(对于BROKEN 的情况,它已经进去了)。
编辑:
我的意思是:唯一的副作用是打开ON 灯,这是有保证的(它要么打开,要么在这里什么都不做)
请看这里:Is REST DELETE really idempotent?
哪一个是正确的?根据理解,我的 REST API 是否确保幂等性......
EDIT2:
来自W3C的定义方法还可以具有“幂等性”属性,因为(除了错误或过期问题)N > 0 个相同请求的副作用与单个请求相同。
我可以认为当它是BROKEN 时转动ON 是一个错误吗?
【问题讨论】:
标签: api rest http idempotent