Ail*_*ens 6 api rest http idempotent
我有一个REST API,其中多个客户端(应用程序)可以使用PUT更新资源的状态.例如,此资源是您可以转动的灯ON或OFF.
当系统检测到发生电力故障时,该资源也会自动更新,导致灯处于BROKEN state. I want to made the distinction between BROKEN状态.我想区分OFF和BROKEN,一盏灯ON不能转PUT!
我用PUT http://address:port/my_lamp { "state": "ON"} 方法来做这件事,比如说PUT
但我不确定我是否尊重ON方法的幂等属性.事实上,我有3个案例:
ON.上面的代码导致了ON状态.ON.上面的代码导致了BROKEN状态....很酷!此时,幂等性仍然有保证:-)!503 Service Unavailable.上面的代码会导致错误,例如PUT我不确定正确理解幂等性的概念.相信我,我读了很多关于它的事情,但仍然有点困惑.
在我的理解中,多个BROKEN总是导致资源的相同状态:在我的情况下不能保证由于PUT
但我也可以用另一种方式来理解它:多重ON总是导致相同的副作用:保证,我的请求要么产生转动BROKEN,要么没有(对于这种ON情况,它已经存在).
ON灯泡,这是保证的(它要么开启,要么在这里什么都不做)
请参阅此处:REST DELETE真的是幂等的吗?
哪一个是正确的?根据理解,我的REST API确保了幂等性能......
方法也可以具有"幂等"的属性(除了错误或到期问题)N> 0个相同请求的副作用与单个请求相同.
我可以认为BROKEN在灯泡熄灭时是错误的ON吗?
幂等性意味着在隔离环境中,来自同一客户端的多个请求对资源状态没有任何影响.如果来自另一个客户端的请求改变了资源的状态,那么它不会破坏幂等性原则.虽然,如果您确实希望确保put请求不会最终通过来自不同客户端的另一个同时请求覆盖更改,则应始终使用etags.详细说明,put请求应始终提供最后一个资源状态的etag(它来自get请求),并且只有etag是最新的,才应更新资源,否则应该引发412(Precondition Failed)状态代码.在412的情况下,客户端假设再次获取资源,然后尝试更新.根据REST,这对于防止竞争条件至关重要.
详细说明: -
根据W3C(http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html),'方法也可以具有"幂等"的属性(除了错误或过期问题)副作用N> 0个相同的请求与单个请求相同.
获取请求 - {'state':'ON'} Etag-header(说) - 123 PUT请求 - {'state':'OFF'} Etag-header - 123
一些内部活动改变状态,使得新状态为{'state':'BROKEN'}.在这个甚至etag应该改为124.
put request - {'state':'ON'} Etag-header - 123.由于etag标题已更改,因此返回412错误,这不会破坏api的幂等性(除了错误或过期问题).
获取请求 - {'state':'BROKEN'} Etag-header - 124 Put request - {'state':'ON'} Etag-header - 124
| 归档时间: |
|
| 查看次数: |
1172 次 |
| 最近记录: |