【发布时间】:2018-10-29 02:06:57
【问题描述】:
【问题讨论】:
-
在您引用的文字中是单词:可能不是必须
【问题讨论】:
您引用的文字具有误导性。规范要求PATCH请求“要么完全替换关系的每个成员,如果无法找到或访问某些资源,则返回适当的错误响应,或者如果不允许完全替换,则返回403 Forbidden响应由服务器。” (Source) 但这不是您应该考虑禁止替换一对多关系的原因。
该规范列出了您可能认为不允许它作为注释的原因之一:
由于完全替换(对多关系)可能是一个非常危险的操作,服务器可能会选择禁止它。例如,如果服务器没有向客户端提供相关对象的完整列表,并且不希望允许删除客户端未看到的记录,则服务器可能会拒绝完全替换。 (Source)
另一个常见问题是碰撞。让我们假设客户端 A 和 B 请求的资源包括关联对象的完整列表。如果两者都关联另一个对象并因此通过 PATCH 使用完全替换,则第二个请求将覆盖第一个请求,因此 删除第一个请求创建的关系,甚至不知道它。
通过POST 和DELETE 使用relationship links 更新关系可避免此问题。在这种情况下,客户端只是修改特定的关联,而不涉及其他关联。
【讨论】: