REST URL 多对多关系设计
REST URL Design for Many to Many Relationship
所以我得到了模型 User
和 Poll
,用户可以在其中创建许多民意调查(所以我们在这里得到了 1:n 关系)和连接 table Participant
作为一个用户可以参与许多民意调查,一个民意调查可以有很多用户。
我需要定义两个 REST 端点:
一个用于获取用户创建的投票列表,一个用于获取用户参与的投票列表。
对于我定义的第一个端点:
GET /users/:id/polls
...这是定义 1:n 关系的常用方法。
但是对于第二个端点,我完全不知道这在 REST 中会是什么样子。我基本上有用户并且需要用户参与的所有民意调查。我想把事情做好,不想浪费太多时间,所以我想出了这个可恶的东西:
GET /users/:id/polls/participation
有没有人知道如何设计它?甚至可以在使用 REST 的单个调用中映射它吗?
好吧,正如我收到的问题,您需要构建简单的 get 来获取数据。
我建议您添加 GET /users/:id/poll?participation=true 之类的获取参数。这个可以参考你的模型,简单易懂。
我主张将 polls
设为顶级资源。然后你可以支持
GET /polls?createdBy={userId}
GET /polls?participant={userId}
您可以根据需要添加其他查询参数。另一种选择是拥有一个单独的资源,poll-participants
,它保存映射。
GET /poll-participants?creator={userId}
GET /poll-participants?particpant={userId}
在这种情况下,您将获得一个包含映射对象列表的资源。他们可以保留整个用户并在每个用户中进行投票,或者他们可以拥有您必须遵循的链接才能获取完整的用户并进行投票。这在用户和轮询可缓存时效果最好。
所以我得到了模型 User
和 Poll
,用户可以在其中创建许多民意调查(所以我们在这里得到了 1:n 关系)和连接 table Participant
作为一个用户可以参与许多民意调查,一个民意调查可以有很多用户。
我需要定义两个 REST 端点: 一个用于获取用户创建的投票列表,一个用于获取用户参与的投票列表。
对于我定义的第一个端点:
GET /users/:id/polls
...这是定义 1:n 关系的常用方法。
但是对于第二个端点,我完全不知道这在 REST 中会是什么样子。我基本上有用户并且需要用户参与的所有民意调查。我想把事情做好,不想浪费太多时间,所以我想出了这个可恶的东西:
GET /users/:id/polls/participation
有没有人知道如何设计它?甚至可以在使用 REST 的单个调用中映射它吗?
好吧,正如我收到的问题,您需要构建简单的 get 来获取数据。 我建议您添加 GET /users/:id/poll?participation=true 之类的获取参数。这个可以参考你的模型,简单易懂。
我主张将 polls
设为顶级资源。然后你可以支持
GET /polls?createdBy={userId}
GET /polls?participant={userId}
您可以根据需要添加其他查询参数。另一种选择是拥有一个单独的资源,poll-participants
,它保存映射。
GET /poll-participants?creator={userId}
GET /poll-participants?particpant={userId}
在这种情况下,您将获得一个包含映射对象列表的资源。他们可以保留整个用户并在每个用户中进行投票,或者他们可以拥有您必须遵循的链接才能获取完整的用户并进行投票。这在用户和轮询可缓存时效果最好。