我對REST原理相當熟悉,並已閱讀相關論文,維基百科條目,一堆博客文章和有關此主題的StackOverflow問題,但仍未找到常見情況的直接答案:如何獲取REST風格的只讀vs可編輯資源?
我需要請求一個資源來顯示。根據資源的狀態,我需要呈現一個只讀或可編輯的表示形式。在這兩種情況下,我需要獲取資源。我如何構建一個URL來獲取只讀或可編輯版本?
如果我的用戶跟着GET /resource/<id>
的鏈接,那應該足以表明他/她需要只讀表示。但是如果我需要將可編輯表單服務器起來,那麼這個URL是什麼樣子的? GET /resource/<id>/edit
是顯而易見的,但它在URL中包含一個動詞。改爲GET /resource/<id>/editable
解決了這個問題,但在表面上看似膚淺。這一切是否存在 - 將動詞改爲形容詞?
如果我使用POST檢索可編輯版本,那麼如何區分最初檢索它的POST與保存它的POST?我使用POST的(弱)藉口是檢索可編輯版本會導致服務器狀態的變化:鎖定資源。但是,只有我的要求是實施這樣的鎖定,情況並非總是如此。由於同樣的原因PUT失敗,加上PUT在我運行的Web服務器上默認沒有啓用,所以有實際的理由不使用它(和DELETE)。
請注意,即使在可編輯狀態下,我還沒有做任何更改;大概當我再次將資源提交給Web服務器時,我會將其發佈。但爲了讓我可以稍後POST,服務器必須第一個提供一個特定的表示。
我想另一個辦法是必須在集合級別不同的資源: GET /read-only/resource/<id>
和GET /editable/resource/<id>
或GET /resource/read-only/<id>
和GET /resource/editable/<id>
...但是這看起來很醜陋給我。
想法?
是的,我知道,這就是我的問題的關鍵。我給出了PUT和POST的例子,我認爲這些方法不會起作用,即使我可以找到它們的邊緣語義原因。所以,回到GET。我如何區分可編輯和不可編輯表示? – Val 2011-01-12 01:15:03
他們爲什麼會有不同? (在GET的情況下) – 2011-01-12 01:16:57
他們會有所不同,因爲需要可編輯。這意味着我需要渲染一個表單。我需要知道我是否在表單中呈現請求的資源。我如何知道如何呈現資源? – Val 2011-01-12 01:21:51