什麼你基本上是問被稱爲方法重載 - 雖然它不是100%的REST風格,這是你可以回退到的情況下,客戶端沒有辦法支持PUT/DELETE方法。理查森的/ Ruby的書RESTful Web Services也提到了這種方法。
你創造你自己的基本原則在你的問題 - 的差別時相比,完全基於REST的做法是,你介紹其提交的通過POST請求主體的一部分的新參數。此參數指示通過(超載)POST請求提交的預期方法(例如,POST/PUT/DELETE)。這可以讓您克服客戶端的HTTP方法限制,同時仍然保持您的URI設計清晰和RESTful(例如沒有動詞)。但是,您仍應該儘可能多地使用RESTful,即繼續使用GET進行只讀請求(從而不會影響緩存等),並對任何寫入請求使用重載的文章。至於如何命名保存真正的HTTP方法的參數 - 我自己並不知道任何標準化的命名策略,所以使用Prototype.js(或者任何適合您的命名策略的名稱)的內容應該是精細。
關於jQuery和XmlHttpRequest一般來說,這些應該支持PUT和DELETE方法。請參閱:
注意,jQuery的文檔警告有關支持的PUT/DELETE是依賴於瀏覽器。我理解的方式是在使用XHR時應該支持這些方法......但是,在POST超載與完整的HTTP方法堆棧之間作出決定之前,您應該測試所有目標瀏覽器是否支持這些方法。
jQuery在默認情況下提供對.get()
和.post()
方法的訪問,這兩種方法都建立在.ajax()
之上。要通過jQuery執行PUT/DELETE調用,您需要直接使用.ajax()
方法,並在設置中指定type
中的方法。然而,這是一個真正的PUT/DELETE請求,因爲jQuery本身沒有提供任何自動的方法來處理方法重載(所以你需要自己編寫代碼,以便它適合你的API設計)。
如果您不會使用XHR並需要依賴標準表單,那麼恐怕您將不得不使用方法重載,因爲支持PUT/DELETE方法作爲有效表單操作值已從HTML5 spec(這也在您提到的SO問題中提到)。
你是什麼意思「不能」?你的意思是客戶沒有連接? – diagonalbatman 2011-02-14 16:58:37
我更新了我的問題,是否更好? – 2011-02-14 17:04:12