POST 是非幂等的,这意味着如果您多次发送相同的 POST 请求,您将获得许多新项目。PUT 应该是幂等的,因为在同一资源上发生的相同更新在多次执行时应该没有副作用。
至于这个动作应该去哪里,这真的取决于你的审美感受力,以及你对 REST 的要求与保持你的 Rails 控制器干净和井井有条的程度。
毫无疑问,DeletedBob 是与 Bob 不同的资源。您可以说发送到 DeletedBobsController 的 PUT 将更新 DeletedBob 资源,可能使用“deleted=false”之类的参数来指示更新的目的。
您也可以将删除视为一种资源。然后你可以在 DeletionsController 上使用 DELETE,参数为“resource_type=bob&resource_id=23”。通过销毁删除,您正在恢复原始对象。随后的相同调用将产生“找不到对象”错误,正如人们对 DELETE 所期望的那样。
就个人而言,自从 Roy Fielding(定义 REST 的论文的原作者)出来并说POST 确实没有问题:put => :restore
,我会考虑在我的 BobsController 上定义一个额外的方法和路由。它将代码保存在其他程序员期望的位置,并且他们可能是这种设计的唯一受众。