哪个端点应该代表与非相关元素的多对多关系

Which Endpoint should represent a trhreeway many to many Relationship with non related elements as well

很难将问题简化为一行,但我希望我能在这里更好地解释自己:

我有以下型号:

用户

消息

标签

用户消息类别

Tags 不是user 创建,可用的 tags 是通过管理面板创建的。

我想为 message 创建一个 returns 可用 tags 的端点,但与那些已经关联的端点,通过 user,到 message flagged.

我似乎找不到一个 Rest 标准方法来做这个。

PS:为了说清楚,我要:

{
   tags:[
     {id: 1, associated: false},
     {id: 2, associated: true},
     {id: 3, associated: false}
   ]
}

或者方法是:

{
   tags:[
     associated:[
       {id: 2},
       {id: 1}
     ],
     unassociated: [
       {id: 3}
     ]
   ]
}

我也不知道它是否应该被退回(我想是这个):

/users/1/messages/1/tags

或通过:

/tags

甚至通过:

messages/1/tags

编辑:更改了端点,因此 URI 是用复数名称构建的。

你为什么不试试 /tags?user=X&message=Y?据我了解,标签不是消息或用户的直接子代,因此无需成为 URL 模式中的直接子代。
REST 没有定义访问资源的真实模式,因此您可以像我写的那样通过 GET 参数使用它更像查询,或者您可以像您建议的那样使用更像树的结构。
您能做的最好的事情就是让项目的每个 REST 资源都可以通过类似的 URL 模式访问,以使其更加用户友好。

您提出的第一个格式化解决方案 JSON 我认为结果更好

{
    tags:
    [
        {id: 1, associated: false},
        {id: 2, associated: true},
        {id: 3, associated: false}
    ]
}

但这在很大程度上还取决于您如何为项目的其他 REST 服务建模。如果需要,您还可以 return 将标签与消息相关联的用户,以提高可读性。

你可以去(注意复数名称):

/users/:user-id/messages/:message-id/tags

假设标签可以在没有消息的情况下存在,您还可以支持端点到 return 所有可用标签:

/tags