在rails中使用通用路由的缺点



使用通用路由有哪些缺点:

match ':controller(/:action(/:id(.:format)))'

我被告知这是不推荐的,但我不明白为什么。用这个会有什么问题?

因为如果您使用相反的顺序':controller(/:id(/:action))',则更容易实现REST,并且rails现在有更方便的方法使用显式resource路由获得适当的HTTP谓词。

理解REST的基本原则将使您更容易公开API,如果您选择沿着包含HTTP原则的路线走下去的话。它还可以防止您做某些不明智的事情,例如使使用GET请求删除记录成为可能。(除非谷歌或你的内部搜索机器人决定将所有链接索引到:delete actions,否则你可能不会发现这个不明智的做法。)

基本思想是GET/Url应该意味着获取资源。当您将操作放在首位时,资源是半模糊的,并且您意外地打开了潜在错误的大门,因为所有HTTP方法都可以用来调用破坏性操作。使用以HTTP动词为中心的方法,可以将UPDATE请求发送到与SHOW请求相同的URL。

对您的问题的具体回答,我理解为理解通用方法的缺点:

一个重要的风险是你让每一个控制器操作(非保护)对你的用户可用。这让他们能够访问你的整个控制器动作"树",这取决于你的情况。

此外,您还为用户提供了GET而不是POST、POST而不是GET的能力,等等。

上面生成的注释很好地解释了这一点。

#注意:此路由将使每个控制器中的所有操作都可以通过GET请求访问。

这意味着理论上您可以在只能通过POST访问的路由上执行GET请求。ie。你可以添加一个名为/postable的路由到一个用户对象,它应该只被POST到,但如果你使用上面的规则,你也可以对它做一个GET请求(带空参数)。

实际上你不会遇到问题。相反,您将失去使用资源路由所获得的优势:

  • 帮助简化控制器设计的通用模式
  • HTTP动词(GET, PUT, POST, DELETE)的免费rest式处理
  • 和平、爱与幸福*

你可以通过阅读Rails路由指南找到更多关于资源路由的信息。

*和平、爱和幸福并非在所有地区都能得到。

相关内容

  • 没有找到相关文章

最新更新