2011-02-14 226 views
1

我期待實現一個RESTful API,我想知道當瀏覽器客戶端無法對服務器執行PUT/DELETE請求時,建議使用什麼參數。 (因爲some browser apparently doesn't support these requests當客戶端無法發出PUT/DELETE請求時,建議使用什麼方法?

是否存在某個特定參數的名字嗎? (就像POST請求中的request_method = DELETE那樣,應該向服務器指出客戶端真的想要DELETE但不能指出它)?還是沒有這樣的規格?在prototype.js中使用

searches lead me to the parameters 「_method」。但是這個參數是一個標準嗎? 例如,jQuery如何處理它?

感謝您的幫助。

+0

你是什麼意思「不能」?你的意思是客戶沒有連接? – diagonalbatman 2011-02-14 16:58:37

+0

我更新了我的問題,是否更好? – 2011-02-14 17:04:12

回答

2

什麼你基本上是問被稱爲方法重載 - 雖然它不是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問題中提到)。

1

方法PUT /刪除/ GET通常由與該請求所發送的HTTP標頭determiend。雖然你應該堅持使用的方法,你可以做你想要的服務真正在你的服務與呼籲進來 - 然後你有點打破了RESTfull服務的想法:)

這是一個非常翔實的文章關於REST,應該幫助清除您的想法 - Understanding REST: Verbs, error codes, and authentication