背景
我有一个REST API,多个客户端(应用程序)可以使用PUT更新资源的状态。例如,这个资源是一盏可以打开或关闭的灯。
当系统检测到停电时,这个资源也会自动更新,导致灯处于“坏掉”的状态。我想区分“坏掉”和“关闭”,处于“坏掉”状态的灯不能被打开!
问题
我使用PUT方法来做这件事,类似于 PUT http://address:port/my_lamp { "state": "ON"}
但我不确定是否遵守了PUT方法的幂等性属性。实际上,我有三种情况:
- 灯是打开的。上面的代码将导致灯处于打开状态。
- 灯是打开的。上面的代码将导致灯处于打开状态....很酷!此时,幂等性仍然得到保证:-)!
- 灯是坏掉的。上面的代码将导致错误,如503服务不可用
问题
我不确定是否正确理解幂等性的概念。相信我,我读了很多关于它的东西,但仍然有点困惑。
在我的理解中,多个PUT总是导致资源的相同状态:由于“坏掉”,在我的情况下不能保证
但我也可以用另一种方式理解它:多个PUT总是导致相同的副作用:保证,我的请求要么产生打开状态,要么不做任何事情(对于“坏掉”的情况,它已经存在)。
编辑:
我的意思是:唯一的副作用是打开灯,这是有保证的(它要么打开,要么在此处不做任何事情)哪一个是正确的?根据理解,我的REST API是否确保幂等性...
编辑2:
从W3C的定义中方法还可以具有“幂等性”属性,即(除了错误或过期问题),N > 0个相同请求的副作用与单个请求的副作用相同。
当灯泡是 BROKEN
状态时,打开灯是否算错误?