2016-04-29 116 views
0

我正在設計一個寧靜的API。在這個API中,可以使用API​​進行POST,DELETE和GET情況。如果有一個情況你覺得特別重要,那麼可以對它進行「投票」,以便案件變得更加優先。REST API中的「投票」資源應該使用哪種方法?

但是我想知道這應該是什麼類型的方法?

哪一個應該是:

GET /cases/{case_id}/vote 
POST /cases/{case_id}/vote 
PUT /cases/{case_id}/vote 

調用投票方法將只通過1 增加的票數我目前傾向於把自己看到,因爲它是如何在現有數量的更新(儘管POST也可以用於此),但我想知道該公約是什麼。

+0

http://stackoverflow.com/questions/630453/put-vs-post-in-rest 這個話題似乎有一個好主意,應該使用什麼,但沒有給我一個明確的答案在我的情況。 – Terabyte

回答

1

首先,我會說出資源

/cases/{case_id}/votes 

這清楚地表明,這是本案的票資源。

然後在這個資源使用

POST /cases/{case_id}/votes 

。在服務器上,票數將增加1。

請勿使用PUT,因爲這意味着客戶端控制的總票數不正確。客戶端只會觸發增加一個,它不會設置總票數。

+0

作爲投票,這是不夠的,因爲我目前的建議不承認來自同一個客戶/用戶的多票,因此使投票以某種方式無用。無論是需要將用戶/客戶端添加到URI /資源還是其他一些技術,以允許每個用戶/客戶端只需添加一個投票 –

+0

是的,服務器將負責識別來自同一用戶的重複投票。但這不是一個API問題。 – 2016-04-29 07:46:23

+0

讓服務器跟蹤每個用戶/客戶端的一票約束,實際上是將服務器的狀態外部化。作爲一個窮人的方法,服務器可以鎖定IP地址,防止進一步調用相應客戶端的URI。如果服務器是鏡像的,或者在不跟蹤IP2Host連接的負載平衡器後面,則來自同一客戶端的進一步請求可能由第二個服務器處理,因此仍算作第二票。當然,還有更好的技術,儘管將服務器狀態外化並不總是最好的選擇 –