gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:36:21 25 4
gpt4 key购买 nike

我有一个资源:

/项目

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

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

我可以通过以下方式获得选票(它使用来自访问 token 的已登录用户 ID 来存储带有 key [item_id, user_id] 的选票):

GET/items/{item_id}/votes - 获得对一个项目的所有投票

GET/items/{item_id}/upvotes - 获得对一个项目的所有赞成票

GET/items/{item_id}/downvotes - 获得对一个项目的所有反对票

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

DELETE/items/{id}/votes ??并根据用户 ID 删除 - 但此资源指的是我不想删除整个集合的集合,我确实有足够的 user_id 和 item_id 信息来删除投票,但这对我来说似乎不正确。

我目前无法直接引用用户的投票,所以我应该为每张投票添加一个 ID 并且:

DELETE/items/{item_id}/votes/{vote_id}

或者可能只是:

DELETE/votes/{vote_id)

或者我不需要投票 ID,我可以使用:

DELETE/item/{item_id}/votes/mine/ - 使用我登录的 user_id 从集合中删除一个项目

总结一下;通过 HTTP 方法使用 REST 从集合中删除项目的正确方法是什么?

更新

我觉得这些是最好的解决方案

POST/items/{item_id}/votes - 使用 item_id 和 user_id(来自访问 token )创建新投票

DELETE/item/{item_id}/votes/mine/ - 使用 item_id 和 user_id(来自访问 token )删除我的投票

最佳答案

这在一定程度上取决于您的集合的外观,但我假设如果投票是反对票,它会同时出现在 downvotes 集合和 votes 集合中.

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

为了符合 REST,您应该确实为特定的投票资源提供特定的 url。如果 /items/{item_id}/votes/{vote_id} 是投票的唯一路径,DELETE 并且(如您所说)不是集合。

所以你的另一个例子:

DELETE /votes/{vote_id)

很好。如果这是一个全局唯一的 vote_id,那么该资源仍然可以出现在帖子特定的 downvotesupvotesvotes 集合中。

但是这个:

DELETE /item/{item_id}/votes/mine/

我个人可能会避免。这不是 super 错误,但您需要 mine 出现在 url 中这一事实可能意味着您的客户端正在手动构建 url 而不是发现它。实际的 url 大多是无关紧要的。

响应您的更新

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

所以这些是我要采取的步骤:

  1. 客户可以通过 /items/{item_id} 访问项目
  2. 该项目应具有指向 /items/{item_id}/votes/{user_id} 的链接。
  3. 客户端使用该链接PUTDELETE 投票。

关于REST:使用隐含 ID 作为输入从集合中删除资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com