2016-12-28 25 views
1

據我所知,GET必須是冪等的 - 它不能改變系統中的任何東西,重複它應該總是返回相同的,除非別的東西改變了應用程序的狀態。如果有小的副作用,可以使用HTTP GET嗎?

問題是,在我的網站上,根據用戶以前是否看到過某些內容,應該進行很多很少的更改。我的意思是,像通知,新消息警報,基於用戶是否看到它的內容排序,有多少用戶看到了內容計數器......例如,當用戶點擊通知時,通知應該從他的通知面板中消失,並且永遠不會所以它改變了一些東西 - 通知的狀態,但我可以按F5多次按我想要的,它總是返回相同的信息頁面,相同的按鈕等。副作用太小,我可以使用GET或我必須使網站上的大多數鏈接和按鈕使用POST,就像使用鏈接和按鈕導致更「嚴重」的更改一樣?我這樣做的方式是在表單行爲和原始按鈕之間創建表單,這些表單對我來說似乎有點混亂,而且我幾乎不想在任何地方都使用它(或者有更好的方法嗎?)。 。

+1

更重要的問題是請求是否安全*,請參閱https://greenbytes.de/tech/webdav/rfc7231.html#safe.methods –

回答

2

這可以從多個角度來解決,我會從這個角度照亮它:

這裏最終的結果總是相同的,因此,該請求是冪等的。

用戶訪問該URL,最終結果是通知被清除。他們可以一次又一次地訪問該頁面,最終結果是通知已被清除。他們不會收到錯誤消息,因爲通知先前已被清除(這不會是冪等的)。是的,他們每次訪問該頁面時都會看到不同的內容,但沒有任何內容表明每次請求資源時頁面內容必須相同(這會將網絡的一半放入綁定中)。

將POST請求與/questions(例如創建一個新問題)進行對比:每次您重複該POST請求時,都會創建一個全新的資源。您POST一次,並且正在創建/questions/12345。您重複相同的請求,正在創建/questions/12346。那是不是冪等。

不,您不需要將所有這些請求放入POST請求。

相關問題