在我的Rails应用程序破坏的资源后,用户可以恢复它点击一个链接。

目前此还原作用被路由到对应的资源控制器的破坏方法。

当此方法在数据库中查找该资源,它破坏它和在垃圾表移动记录。

当它没有在数据库中找到的资源,它会搜索它在垃圾桶表,如果它发现的资源它恢复它。

我不这样做的这种方式很满意,具有两个目的的破坏方法:破坏和恢复

我可以创建在我的控制器专用的恢复动作,但在REST方式,你会在哪里放置恢复请求处理?在一个专用控制器?如果是这样,利用该方法,PUT或POST?

有帮助吗?

解决方案

POST是非幂等,这意味着如果你发送相同的POST请求很多次,你会得到很多新的项目。 PUT应该是幂等的,因为执行多次时相同的更新发生在同一资源上应该没有副作用。

至于其中这个动作应该去,这真的取决于你的审美sensibilty以及如何铁杆你想了解REST与保持你的Rails控制器干净整齐。

这当然是值得商榷的一个DeletedBob是从鲍勃不同的资源。可以说,发送到DeletedBobsController一个PUT将更新DeletedBob资源,也许像“删除=假”来指示更新的用途的参数。

您也可以考虑缺失作为一种资源。然后,你可以使用在DeletionsController删除与PARAMS“RESOURCE_TYPE =鲍勃RESOURCE_ID = 23”。通过破坏删除,要恢复原来的对象。随后的相同的呼叫将产生一个“对象未找到”错误,作为一个将与期望DELETE

就个人而言,自从罗伊菲尔丁(论文定义REST的原作者)出来说有真正的没有错POST ,我会考虑定义在我BobsController额外:put => :restore方法和途径。它使其中另一个程序员希望它的代码,他们很可能对这种设计的唯一观众。

其他提示

我认为REST纯粹主义者会创建一个由一个TrashController处理的新的资源称为垃圾。为了处理恢复,你将有一个行动TrashController称为恢复。

的URL是这样的:

http://example.com/trash/restore/{resourceId}

我觉得,既然是行动上的资源,功能应该住在ResourceController。一个RESTful架构的我的工作understadings的是,拇指对PUT和POST之间确定的规则是POST用于创建和PUT用于更新。在这种情况下,我希望该资源“存在”,你正在更新其状态,你会使用一个PUT和恢复URI会是这样的:

http://example.com/resources/restore/ {ID}

我认为上述肖恩在正确的轨道上,但我会采取了一步。使垃圾的行动,用更新的POST资源trash=1。然后恢复只是另一种POST到的相同的与trash=0资源

编辑:代替不正确的方法PUT与给定的请求不是发送整个资源,只是资源的一部分的更新POST

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top