在REST API中将多对多关系中的条目进行关联/分离的正确方法是什么?

时间:2018-06-23 21:47:03

标签: rest

我正在构建一个简单的REST api,该API具有用户和社区。

User实体与Community有很多关系。
用户可以在多个社区中拥有成员身份,而社区可以有多个用户。

用于创建用户并将其分配给特定社区的端点如下:

POST /communities/5/users

当我要删除用户并将其与特定社区解除关联时,请使用以下方法:

DELETE /communities/5/users/8

问题是,如何设计端点以使用户加入社区并以适当的方式离开社区(不删除用户)?

2 个答案:

答案 0 :(得分:1)

由于用户可以属于许多社区,也可以不属于任何社区,因此将用户视为独立于社区的资源是有意义的。通过POST /users创建它们,并通过DELETE /users/:id从系统中将它们删除。

与社区相同。通过POST /communities创建它们,并通过DELETE /communities/:id删除它们。

现在,您可以通过POST /communities/:id/users将用户添加到社区,其中有效负载包含要添加的用户的ID。您可以通过DELETE communities/:id/users/:userid从社区中删除用户。

每个社区实体都可以具有指向URL的链接以获取其用户(/communities/:id/users),也可以将用户包括在实体本身中。

或者,您可以拥有membership资源来链接社区及其用户。如果成员资格本身具有社区标识和用户标识以外的其他属性,这可能会很有趣。

答案 1 :(得分:1)

  

问题是,如何设计端点以使用户加入社区并以适当的方式离开社区(不删除用户)?

您将如何使用网站?

例如:您可能决定用户可以选择自己的组成员身份。因此,您将为用户提供一个描述他们所属组的网页。也许该页面包含一个带有一堆复选框的表单,用户可以取消选中他们不想再属于的组的复选框,然后提交表单。

对于REST API,请执行相同的操作。