多对多关系的REST URL设计

时间:2016-10-21 12:24:23

标签: rest many-to-many relation api-design

所以我得到了模型User&amp; Poll用户可以在其中创建多个民意调查(因此我们在此处获得1:n关系),并且作为用户的联接表Participant可以是许多民意调查的一部分,并且民意调查可以有许多用户。< / p>

我需要定义两个REST端点: 一个用于获取用户创建的民意调查列表,一个用于获取用户是参与者的民意调查列表。

对于我定义的第一个端点:

GET /users/:id/polls

...这是定义1:n关系的常用方法。

但是对于第二个端点,我完全不知道在REST中它会是什么样子。我基本上有用户,需要用户参与的所有民意调查。我想把事情做好,不想浪费太多时间,所以我想出了这个令人厌恶的事情:

GET /users/:id/polls/participation

有没有人知道如何设计这个?甚至可以使用REST在一次调用中映射它吗?

2 个答案:

答案 0 :(得分:1)

好吧,当我得到您的问题时,您需要构建简单的获取数据。 我建议你添加get param,如GET / users /:id / poll?participation = true。这可以参考您的模型并且易于理解。

答案 1 :(得分:1)

我主张将polls作为顶级资源。然后你可以支持

GET /polls?createdBy={userId}
GET /polls?participant={userId}

您可以根据需要添加其他查询参数。另一种方法是使用一个单独的资源poll-participants来保存映射。

GET /poll-participants?creator={userId}
GET /poll-participants?particpant={userId}

在这种情况下,您将获得一个包含映射对象列表的资源。他们可以拥有整个用户并在每个用户中进行投票,或者他们可以拥有您必须遵循的链接以获取完整用户和民意调查。当用户和轮询可缓存时,这种方法效果最佳。