哪个HTTP动词最适合添加/删除多对多关系?

时间:2018-06-29 03:30:35

标签: rest http

假定关系数据库A和B中的两个表以及一个联接表C。在显式添加关系之前,联接表为空。

我正在公开REST端点以添加/删除这些关系(添加/删除表C中的条目)。他们不修改表A或B中的条目,但是从消费者的角度来看,A与B的关联与实体本身一样重要。它会感觉,就像正在修改资源一样。但是实际上发生的是正在从表C中添加/删除一行。

哪个动词最适合添加/删除端点?发布/删除?放放?甚至可以提出PATCH的理由(如果我采用“修改的”路线,那么我就不会替换整个资源,只是其中的一部分)

更新:我看到通过创建新资源(/ api / friendships / create |删除)来处理类似情况。如果这最终是答案,就可以了,但是在我看来,这种关系更像是在

中添加/删除的播放列表

2 个答案:

答案 0 :(得分:1)

由于这些关系是一等公民,因此适当的动词应为POST和DELETE(如果无法复制关系,即每个A-B对只能存在一个关系,则为PUT和DELETE)。在RESTful API中,HTTP谓词通常比服务器的实现细节更符合消费者的意图(这不是消费者所关心的)。

答案 1 :(得分:1)

  

哪个动词最适合添加/删除端点?

您将如何使用网站?

客户端可能会加载某种形式-它可能有一个A和一个B的列表,或者它可能假设一个特定的A并仅提供一个列表B。用户可以从表单中的选择中进行选择,然后提交。

由于它不是safe,因此您可能会指定表单上的方法为POST

如果客户端知道关系端点的表示形式,并且知道应该为关系资源使用什么URI,那么PUT可能是合适的-那时,您实际上是在做远程创作。