Rest 哪一个端点应该表示与非相关元素的TRHREWAY多对多关系

Rest 哪一个端点应该表示与非相关元素的TRHREWAY多对多关系,rest,restful-architecture,restful-url,Rest,Restful Architecture,Restful Url,很难把问题归纳成一行,但我希望我能在这里更好地解释自己: 我有以下型号: 用户 身份证 消息 身份证 标签 身份证 用户消息类别 身份证 用户ID 消息ID 塔吉德 标签不是由用户创建的,可用的标签通过管理面板创建 我想创建一个端点,该端点返回消息的可用标记,但与该用户已经关联到该消息的标记 我似乎找不到一个标准的休息方式来做这个 附言:我想说清楚,我想: { tags:[ {id: 1, associated: false}, {id: 2, asso

很难把问题归纳成一行,但我希望我能在这里更好地解释自己:

我有以下型号:

用户

  • 身份证
消息

  • 身份证
标签

  • 身份证
用户消息类别

  • 身份证
  • 用户ID
  • 消息ID
  • 塔吉德
标签
不是由
用户
创建的,可用的
标签
通过管理面板创建

我想创建一个端点,该端点返回
消息的可用
标记
,但与该
用户
已经关联到该
消息的标记

我似乎找不到一个标准的休息方式来做这个

附言:我想说清楚,我想:

{
   tags:[
     {id: 1, associated: false},
     {id: 2, associated: true},
     {id: 3, associated: false}
   ]
}
或者可能的方式是:

{
   tags:[
     associated:[
       {id: 2},
       {id: 1}
     ],
     unassociated: [
       {id: 3}
     ]
   ]
}
我也不知道是否应该由以下人员返回(我猜这是一个):

/users/1/消息/1/标签

或通过:

/tags

甚至通过:

消息/1/标签


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

为什么不尝试使用类似于
/tags?user=X&message=Y
?据我所知,标记不是消息或用户的直接子级,因此不需要是URL模式中的直接子级。
REST没有定义访问资源的实际模式,所以您可以像我写的GET参数一样使用它,或者像您建议的那样使用一个更像树的结构。
您可以做的最好的事情是通过类似的URL模式访问项目的每个REST资源,以使其更加用户友好

在我看来,您提出的第一个将结果格式化为JSON的解决方案是更好的解决方案

{
    tags:
    [
        {id: 1, associated: false},
        {id: 2, associated: true},
        {id: 3, associated: false}
    ]
}
但这在很大程度上取决于您如何对项目的其他REST服务建模。如果需要,您还可以返回将标记与消息关联的用户,以提高可读性。

您可以选择(注意复数名称):

/users/:用户id/消息/:消息id/标记
假设标记可以不包含消息而存在,您还可以支持端点返回所有可用标记:

/tags

什么是沟通?沟通和用户信息分类有什么区别?打字、沟通和信息是完全相同的。首先,在IMO中没有RESTfulURL,它只是一个URI。其次,最佳实践通常使用复数形式的资源名称。对于您的实际问题,标记是否可以不包含消息而存在?如果是这样,它就可以作为顶级资源,如果不是,那么它应该是消息的子资源。顺便说一句:我不喜欢计数器作为ID,好像你移动项目或插入新的项目之间的资源ID:2实际上是指向?因此,最好使用一些UUID作为ID。