应该使用 PUT 请求来删除资源吗?

Should PUT request be used to delete a resource?

我有一个不知道如何处理的情况。我有一个资源有一个标志 "undeniable." 拒绝 post,将从数据库中删除它,所以使用

DELETE /v1/posts/post-id-here

会很好;这样 undeniable post 就会被 404 忽略。但是我的 undeniable post 会计算它被拒绝的次数,所以我认为这会破坏 DELETE 的目的。这就是为什么我正朝着 PUT 请求前进,但我找不到关于在 PUT 请求上删除资源的有效性的任何地方。我在想类似以下的事情:

PUT /v1/posts/post-id-here/deny

这将删除 post 或增加计数器,两者都返回 200 OK。有效吗?或者我应该尝试在客户端将它们分开,其中不可否认的 posts 输出 PUT url 而可否认的输出 DELETE url;如果在 undeniable one 上调用 DELETE,是否会返回 404?还是有第三种选择?

方法PUT用于更新资源的完整状态。我认为这不完全是您想要做的。我宁愿看到在资源 /v1/posts/post-id-here 上使用方法 POST。这对应于取消拒绝 post 的操作。据我了解,此类操作将执行以下操作:

  • 如果
  • 之前的值是 false,则将标志 undeniable 设置为 true
  • 增加一个计数器(例如一个字段undenyCounter

还有一种方法 PATCH 允许部分更新资源状态,但我认为这正是您的用例,因为您想要增加一个字段...

最后,使用动作作为路径参数并不是真正的 RESTful ;-) 您可以查看此问题以了解有关如何处理此问题的更多详细信息:

希望对你有帮助, 蒂埃里