1

我想知道关于在 Rails 中使用映射到“销毁”操作的 GET 请求的约定是什么。我正在检查RailsCast 的身份验证,Ryan 选择将 GET 请求映射到 session#destroy 操作,这样他就可以使用简单的锚标记链接到它,而不是使用 form_for/button_to 帮助器来生成包含_method:删除属性:

Auth::Application.routes.draw do  
  get "log_in" => "sessions#new", :as => "log_in"  
  get "log_out" => "sessions#destroy", :as => "log_out"  

  get "sign_up" => "users#new", :as => "sign_up"  
  root :to => "users#new"  
  resources :users  
  resources :sessions  
end  

我的印象是这不是应该的,但 Ryan Bates 是 Rails 的创造者之一,所以我想知道这是否真的像我一直相信的那样重要。

这种路由实现是否有任何严重的缺点,或者它主要是一种旨在提高清晰度的风格约定?

4

1 回答 1

3

如果您使用 GET 进行销毁操作,则违反了HTTP/1.1 规范:

特别是,已经建立了约定,即 GET 和 HEAD 方法不应该具有采取除检索之外的操作的意义。这些方法应该被认为是“安全的”。这允许用户代理以特殊的方式表示其他方法,例如 POST、PUT 和 DELETE,以便用户意识到正在请求可能不安全的操作。(9.1.1)

于 2013-08-12T21:54:20.163 回答