2014-12-22 86 views
2

這是創建資源的經典RESTful方式我在應用程序:如何使用服務器定義的ID構建REST API?

# This creates user. Client is responsible to create UUID, which is simple 
PUT /users/CLIENT_GENERATED_UUID 
# Access user by uuid 
GET /users/UUID 

當我們接觸的數據存儲性能領域的事實證明,隨機生成的UUID不通過的原因有很多,如數據局部性服好務。

服務器生成的ID是很好的表現,但他們並不真正符合REST:

  1. 如果使用POST創建資源,你失去冪等:PUT,GET,DELETE冪等是REST暗示,而POST不是。
  2. 您可以要求服務器在做PUT之前爲您提供一個很好的ID。儘管感覺非常沉重且不明顯,但它並不能保護使用自己的隨機ID而不是詢問它的虛擬客戶端。

有人能給我提示這個架構問題嗎?

回答

4

使用創建資源並不意味着冪等。如果服務器分配ID,則必須爲要創建的每個資源選擇不同的ID。這樣的操作不能是冪等的,重複它必須創建一個不同的資源。

使用POST針對collecton資源作爲

POST /users 

完全是RESTful的,如果服務器分配的ID。這個請求可以重複,它會創建一個不同的資源。

使用像PUT這樣的冪等操作來創建資源只有在問題域允許客戶端控制ID時纔有意義。我認爲大多數域名都不是這樣。

我的建議:使用POST並讓服務器分配ID。

0

在REST環境中,您發送POST來創建資源,並可以返回服務器生成的ID,以便在使用PUT或PATCH之後發送值。

POST /users 
PUT /users/id 

同時,人們創建一個使用客戶端PUT資源生成的ID

PUT /users 

但我認爲最好的形式給出了與POST使用服務器生成的ID。

這裏有一個明確的解釋:http://www.restapitutorial.com/lessons/httpmethods.html

1

其實,當你閱讀REST風格的最佳實踐可以發現:

POST謂詞是最經常被用於創造新的資源。

在addtion到:

PUT也可以用於創建在由客戶端,而不是由所述服務器選擇的資源ID的情況下的資源。

+1

你可以提供這個引號的來源嗎? –

+0

https://s3.amazonaws.com/tfpearsonecollege/bestpractices/RESTful+Best+Practices.pdf,但我可能引用了此文件的不同版本,因爲我使用的是不同的筆記本電腦,然後... –

相關問題