为什么http put请求必须包含一个“完整”状态的表示,而不能只是一个部分?
我理解这是现存的定义——这个问题是关于为什么会这样定义的原因。
即:
防止部分看跌有什么好处?
为什么阻止等幂部分更新被认为是可接受的损失?
最佳答案
put意味着http规范将其定义为什么。客户机和服务器不能改变这一含义。如果客户机或服务器使用了与其定义相矛盾的put,则至少可能会发生以下情况:
根据定义,put是等幂的。意思是客户(或中介!)可以重复放置任意次数,并确保效果相同。假设中介从客户机收到一个put请求。当它将请求转发到服务器时,存在网络问题。中介机构根据定义知道,它可以重试put,直到成功为止。如果服务器以非等幂的方式使用put,这些潜在的多个调用将产生不期望的效果。
如果要进行部分更新,请对子资源使用patch或use post并返回303 see other to the‘main’resource,例如。
POST /account/445/owner/address
Content-Type: application/x-www-form-urlencoded
street=MyWay&zip=22222&city=Manchaster
303 See Other
Location: /account/445
编辑:关于部分更新不能等幂的一般问题:
部分更新通常不能是等幂的,因为等幂依赖于媒体类型语义。注意,您可以指定一种允许等幂补片的格式,但不能保证每种情况下补片都是等幂的。由于方法的语义不能是媒体类型的函数(出于正交性原因),因此需要将修补程序定义为非幂等的。和put(定义为幂等)不能用于部分更新。