2017-03-17 111 views
1

我想知道在WebAPI中POST vs PUT的使用場景。我知道POST用於創建資源的基本概念,PUT用於更新資源,但不能完全理解爲什麼我們需要通過POST進行PUT。HTTP動詞,WebAPI

我有創造2種的WebAPI方法/數據更新到我的店裏SQL 1. CREATEUSER(UserDto) 2. UpdateUser兩個(UserDto)

UserDto包含用戶id,用戶名和電子郵件。

我可以將POST用於創建用戶並將其更新到我的商店的CreateUser和UpdateUser方法。

那麼使用POST爲CreateUser和PUT更新用戶有什麼好處?這僅僅是一個標準/慣例嗎?

謝謝

+1

區別在於PUT是*冪等*設計。檢查此標籤以獲取更多信息:http://stackoverflow.com/questions/tagged/idempotent+put –

+0

如果PUT在設計上是冪等的,那是因爲根據HTTP規範,其URI是要創建的對象的標識符或更新(與POST相反)。 –

+0

*很多*問題的可能重複:http://stackoverflow.com/questions/tagged/post+put+rest –

回答

0

POST總是會創建新的東西。 PUT更新現有的東西。這是一個慣例。

您應該擁有:

POST/users:創建一個新用戶。有效負載不應包含ID

PUT/user /(id):用有效載荷中的數據替換用戶DTO。同樣,有效載荷不應包含用戶ID

PATCH/user /(id):更新用戶的特定成員,但是id。

這是一個設計慣例,就像軟件設計模式一樣,可以讓任何需要使用API​​的人都能輕鬆溝通和理解。

+1

「POST總是創造新的東西」:不一定(例如,如果有效載荷包含ID)。它依賴於API(與PUT相反,它總是冪等的,因爲對象的ID是URI)。 –

+0

不應該導致HTTP 409? http://stackoverflow.com/questions/3825990/http-response-code-for-post-when-resource-already-exists – vtortola

+0

發送一個409代碼確實是一種實現冪等性的方法。通過這樣做,「N> 0個相同請求(在存儲中)的副作用與單個請求相同」。 –

0

POST通常用於將新資源添加到資源集合中。 喜歡這個:POST /users。 此操作不是冪等的,每次調用都會產生副作用。

雖然PUT通常與替換語義一起使用,並且您知道要替換的確切資源。 喜歡這個:PUT /users/1。 此操作是冪等的,它不會對後續調用產生任何副作用。