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
这样的项。它们不需要处于某种层次结构中