答案 0 :(得分:0)
您引用的文字具有误导性。该规范要求一个PATCH
请求,或者完全替换该关系的每个成员,如果找不到或访问某些资源,则返回适当的错误响应,或者如果完全替换则返回403禁止响应。服务器不允许。” (Source)但这不是您应考虑不允许替换多对多关系的原因。
该规范列出了您可能考虑禁止它作为注释的原因之一:
由于完全替换(许多关系)可能是非常危险的操作,因此服务器可能会选择不允许这样做。例如,如果服务器未向客户端提供关联对象的完整列表,并且不希望删除客户端未看到的记录,则服务器可能拒绝完全替换。 (Source)
另一个常见问题是冲突。假设客户端A和客户端B请求的资源包括相关对象的完整列表。如果两者都关联另一个对象并通过PATCH使用完全替换,则第二个请求将覆盖第一个请求,因此删除由第一个请求创建的关系甚至不知道。
使用relationship links通过POST
和DELETE
更新关系可以避免此问题。在那种情况下,客户端仅修改特定的关联,而无需接触其他关联。