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

Ruby on rails 在rails中使用通用路由的缺点,ruby-on-rails,ruby-on-rails-3,routing,Ruby On Rails,Ruby On Rails 3,Routing,使用通用路线的缺点是什么: match':控制器(/:操作(/:id(:格式))” 有人告诉我这不推荐,但我不明白为什么。使用它会有什么问题?上面生成的注释很好地解释了这一点 #注意:此路由将通过GET请求访问每个控制器中的所有操作 这意味着从理论上讲,您可以在只应通过POST访问的路由上执行GET请求。例如,您可以向用户对象添加一个名为/postable的路由,该路由只应发送到,但如果使用上述规则,您也可以对其执行GET请求(使用空参数)。因为如果使用相反的顺序,':controller(/:

使用通用路线的缺点是什么:

match':控制器(/:操作(/:id(:格式))”


有人告诉我这不推荐,但我不明白为什么。使用它会有什么问题?

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

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


这意味着从理论上讲,您可以在只应通过POST访问的路由上执行GET请求。例如,您可以向用户对象添加一个名为/postable的路由,该路由只应发送到,但如果使用上述规则,您也可以对其执行GET请求(使用空参数)。

因为如果使用相反的顺序,
':controller(/:id(/:action)),则更容易实现REST。
,rails现在有了更方便的方法,可以使用显式的
resource
路由来获取正确的HTTP谓词

理解REST的基本原理将使您更容易公开API,如果您选择采用包含HTTP原理的方法的话。它还会阻止您执行某些不明确的操作,例如使用GET请求删除记录。(除非Google或您的内部搜索机器人决定将所有链接编入索引:delete actions,否则可能无法发现不清晰。)


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

从本质上讲,您不会遇到问题。相反,您失去了使用资源路由所获得的优势:

  • 有助于简化控制器设计的通用模式
  • HTTP谓词的自由REST式处理(
    GET
    PUT
    POST
    DELETE
  • 和平、爱与幸福*
通过阅读,您可以了解有关资源路由的更多信息


*和平、爱和幸福并非在所有领域都能得到。条款和条件适用。

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

一个重要的风险是,您将每个控制器操作(不受保护)都提供给您的用户。它使他们能够访问控制器操作的整个“树”,这可能是可取的,也可能是不可取的,取决于您的情况

此外,您还为用户提供了获取而非发布、发布而非获取等功能