2009-09-13 23 views
4

我正在設計一個REST Web服務並對最佳/正確的設計有疑問。有關正確的REST設計的問題

搜索方法應該是POST,因爲相同的請求不必返回相同的數據,對嗎?另外,做/搜索/術語或/搜索並將術語定義爲post-var更好嗎?

另外,如果資源可以在任何時候更新,該方法返回它是GET還是POST。聽起來最好是一個GET,但因爲它可以隨時間變化,所以它不是冪等的。

+0

你誤會冪等的含義。我喜歡使用下面的規則:如果用戶只發出一個請求,並且服務器接收到相同的請求兩次,是否會產生用戶沒有想到的效果?如果是,那麼請求不是冪等的。在你的例子中,如果一個用戶爲一個資源做了一個GET,並且以某種方式,服務器接收到這個請求兩次,最終的結果是用戶可能會看到第二個請求的結果。從用戶的角度來看,他們確實找回了他們所要求的,即使它需要更長的時間。 – 2009-09-13 19:28:25

回答

1

由於您沒有修改資源,因此我建議在網址中使用帶搜索字詞的GET。應該適當地設置頁面上的緩存過期(與所有其他資源一樣)。在這種情況下,您甚至可能想要完全禁用緩存。

+0

繼續我對William Pietri的上述看法,我猜這隻適用於禁用緩存的搜索方法。 理論上,我可以禁用其他資源上的緩存,因爲它們可以隨時更新,並有方法讓它們成爲GET? – 2009-09-13 16:51:12

0

我推薦一個GET與/搜索/項 要更新POST 要創建一個新的東西PUT

+1

您無法直接關聯POST進行更新並創建到PUT。 PUT可以更新和創建,POST可以創建,更新或者不創建。 POST的行爲不是由HTTP規範定義的,它只是建議它通常用於它的用途。 – 2009-09-13 19:18:12

+0

@達勒爾米勒的好處,但就像「他們是簡單的建議」他回答只是一個「推薦」。 8) – ScottCher 2012-05-03 13:07:36