REST:使用隐含ID作为输入从集合中删除资源

REST:使用隐含ID作为输入从集合中删除资源,rest,http,Rest,Http,我有一个资源: /items 我希望允许用户对该资源进行上下投票 POST/items/{item_id}/voces-创建一个新的投票,通过他们的+或-投票 我可以通过以下方式获得投票(它使用access token中登录的用户ID存储带有密钥的投票[项目ID,用户ID]): GET/items/{item_id}/voces-获取项目的所有投票 GET/items/{item_id}/upvows-获取项目的所有up投票 GET/items/{item_id}/downvotes-获取项目的

我有一个资源:

/items

我希望允许用户对该资源进行上下投票

POST/items/{item_id}/voces
-创建一个新的投票,通过他们的+或-投票

我可以通过以下方式获得投票(它使用access token中登录的用户ID存储带有密钥的投票
[项目ID,用户ID]
):

GET/items/{item_id}/voces
-获取项目的所有投票

GET/items/{item_id}/upvows
-获取项目的所有up投票

GET/items/{item_id}/downvotes
-获取项目的所有否决票

因此,
投票
是一个集合,但如果我想完全删除投票,我应该使用:

删除/items/{id}/投票
??和基于用户ID的删除-但此资源指的是集合我不想删除整个集合,我确实有足够的用户ID和项目ID信息来删除投票,但对我来说似乎不正确

我目前无法直接引用用户的投票,因此我是否应该在每次投票中添加一个ID,并:

DELETE/items/{item\u id}/votes/{vote\u id}

或者只是:

DELETE/votes/{vote\u id)

或者我在投票时不需要身份证,我可以使用:

DELETE/item/{item\u id}/voces/mine/
-使用我的登录用户\u id从集合中删除项目

因此,通过HTTP方法使用REST从集合中删除项的正确方法是什么

更新

我觉得这是最好的解决办法

POST/items/{item\u id}/votes
-使用item\u id和user\u id(从访问令牌)创建新的投票


DELETE/item/{item\u id}/voces/mine/
-使用item\u id和user\u id(从访问令牌)删除我的投票

这取决于您的集合的外观,但我假设如果投票是向下投票,它将同时出现在
向下投票
集合和
投票
集合中

这两个集合都应该链接到这一票,理想情况下,这一票(尽管出现在两个集合中)应该在两个集合中都有相同的url

为了符合REST,您确实应该为特定的投票资源指定一个特定的url。如果
/items/{item\u id}/votes/{vote\u id}
是投票的唯一路径,则
删除该路径,而(如您所说)不是集合

那么你的另一个例子是:

DELETE /votes/{vote_id)
也可以。如果这是一个全局唯一的投票id,那么该资源仍然可以出现在特定于帖子的
下行投票
上行投票
投票
集合中

但这是:

DELETE /item/{item_id}/votes/mine/
我个人可能会避免。这并不是大错特错,但您需要
我的
出现在url中这一事实可能意味着您的客户正在手动构建url,而没有发现它。实际的url基本上是不相关的

响应您的更新

您还提到,每次投票都与“用户id”绑定。这意味着您甚至不需要
POST
来首先创建投票。只需向客户端提供正确的“投票”url并
PUT
您的新投票资源即可。(请记住,
PUT
通常更适合创建资源,因为它是幂等的。
POST
通常仅在客户端无法确定新资源url的情况下才有用)

因此,我将采取以下步骤:

  • 客户端可以通过
    /items/{item\u id}
  • 该项目应具有指向
    /items/{item\u id}/voces/{user\u id}
    的链接
  • 客户端使用该链接进行投票

  • @Ray这与目前我的投票没有UUID完全不同,这意味着实际上没有办法获得个人投票,因此没有办法删除实际投票,投票索引由用户的登录ID暗示,我可以使用
    DELETE/item/{item_ID}删除我的投票/投票/mine/
    使用这个用户id。你的想法是什么?我知道,你的投票id不是uuid。我会投票避免
    DELETE/item/{item\u id}/Devots/mine/
    。使用
    DELETE/items/{item\u id}/Devots/{vote\u id}
    如果可能的话,我从未考虑过ID可以是资源UUID以外的任何东西,我可以使用
    /voces/{user\u ID}
    这一事实让我大吃一惊……正如你从这篇评论中看到的,我写道“我的投票没有UUID意味着实际上没有办法获得个人投票”,当有明显的时候!便士掉了lol谢谢。你关于“这两个收藏都应该链接到这一票”的评论是真的有一个(而且是一样的)在两个集合中投票,让我觉得应该只有一个集合,上下投票应该由附加到URI的查询参数来处理,我想你会同意这是更好的选择,对吗?@Neilos不,我认为有三个集合和使用一个查询参数几乎是一样的。所以JU请记住,像
    /foo/col1
    这样的集合完全可以包含
    /foo/col2/abc
    这样的项。它们不需要处于某种层次结构中