2016-01-21 35 views
4

我正在開發一個API,查看有關HTTP方法的文檔,它說「GET」不應該修改資源的狀態。如果我要計算資源查看次數並將其返回給響應,該怎麼辦?如何管理API中的GET方法

喜歡的東西

GET /resource/1 
{ 
    "content": "This is the resource 1", 
    "view_count": 1 
} 

在接下來的調用返回的是:

GET /resource/1 
{ 
    "content": "This is the resource 1", 
    "view_count": 2 
} 

待辦事項我在一些違反規則?

回答

2

我認爲,事實上,view_count被同時使用GET更新不多這裏如果違反了你說view_count不是資源本身的一部分。這只是一些額外的數據。你甚至可以修改你的請求來反映這一點。類似GET /resource/1?include=view_count。我認爲這被稱爲資源擴張。

+0

我認爲與@Viktor A.相同請參閱RFC https://tools.ietf.org/html/rfc7231#section-:「客戶端構造 請求消息以傳達特定意圖」。你的意圖是獲取內容,而不是修改它。所以view_count是一個副作用,不是問題。但請小心,後續的GET請求可能會返回一個帶有舊的「view_count」的緩存表示。如果這對你是一個問題,那麼你應該將這個值分開一個子資源(就像Viktor告訴你的那樣),因爲這意味着它是資源的一部分,而不是副作用。 – BenC

0

儘管不要用GET請求修改資源的狀態是一種好的做法,但我認爲您的用例是一個例外。我真的不能想到另一種方式,甚至可以完成。

編輯:

有人說(刪除其評論之前),該API用戶應先使用PATCH要求每GET要求保持view_count最新的。

我用這種方法看到的問題是view_count會變得不可靠,因爲你依靠你的API用戶保持它的最新狀態。

試想一下,如果網絡用戶必須提交給谷歌Analytics(分析)每次請求他們訪問一個網頁...

+0

這不是Google Analytics所做的事情嗎?每一頁都向谷歌分析服務器提交請求? – Pipe

+0

@Pipe我的意思是作爲一個比喻。讓我知道我能否更好地解釋它。 –

+0

我剛剛瞭解你的隱喻 – Pipe