哪个端点应该代表与非相关元素的多对多关系
Which Endpoint should represent a trhreeway many to many Relationship with non related elements as well
很难将问题简化为一行,但我希望我能在这里更好地解释自己:
我有以下型号:
用户
- id
消息
- id
标签
- id
用户消息类别
- id
- 用户名
- messageId
- tagId
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
很难将问题简化为一行,但我希望我能在这里更好地解释自己:
我有以下型号:
用户
- id
消息
- id
标签
- id
用户消息类别
- id
- 用户名
- messageId
- tagId
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