为什么HTTP PUT请求必须包含"整体"状态的表示,而不能只是部分?
我知道这是PUT的现有定义 - 这个问题是关于为什么以这种方式定义的原因.
即:
通过阻止部分PUT获得了什么?
为什么阻止幂等部分更新被视为可接受的损失?
Jan*_*sen 16
PUT表示HTTP规范定义的含义.客户端和服务器无法改变这种含义.如果客户端或服务器以与其定义相矛盾的方式使用PUT,则至少可能发生以下情况:
根据定义,Put是幂等的.这意味着客户(或中间人!)可以重复任何次数的PUT,并确保效果相同.假设中间人从客户端接收PUT请求.当它将请求转发到服务器时,存在网络问题.中间人根据定义知道它可以重试PUT直到它成功.如果服务器以非幂等方式使用PUT,则这些潜在的多个调用将产生不希望的影响.
如果要进行部分更新,请使用PATCH或在子资源上使用POST并返回303参见"其他"资源,例如
POST /account/445/owner/address
Content-Type: application/x-www-form-urlencoded
street=MyWay&zip=22222&city=Manchaster
303 See Other
Location: /account/445
Run Code Online (Sandbox Code Playgroud)
编辑:关于一般问题,为什么部分更新不能是幂等的:
部分更新通常不是幂等的,因为幂等性取决于媒体类型语义.IOW,您可能能够指定允许幂等补丁的格式,但不能保证PATCH在每种情况下都是幂等的.由于方法的语义不能是媒体类型的函数(出于正交性原因),PATCH需要被定义为非幂等的.并且PUT(被定义为幂等)不能用于部分更新.