[英]REST API upsert endpoint vs create and update endpoints
我正在編寫一個REST API,其余的用於創建/更新/刪除用戶。
編寫創建/更新用戶端點的最佳實踐是什么?
這里有很多錯誤的假設。 使用REST,端點表示“事物”而不是“動作”。
可以說這個東西是用戶。 您可以在uri下托管用戶,例如:
http://example.org/users/roy
從這里開始,所有動作都變得自然。 要刪除用戶嗎?
DELETE /users/roy
要更新嗎?
PUT /users/roy
要檢索嗎?
GET /users/roy
請注意,通常認為PUT比PATCH更RESTful。 如果您嚴格要求使用REST,則最好實施PUT。 我認為PUT與PATCH的區別和好處有點疑問。
現在您還有其他操作...如何創建新用戶? 好吧,我將最佳實踐總結如下:
如果可以允許客戶端確定URI,則可能應該使用PUT。
PUT /users/roy - Should respond with a 201.
如果要確保確實創建一個新用戶而不覆蓋舊用戶,則可以讓客戶端使用If-None-Match: *
標頭強制服務器拒絕請求(如果資源已經存在)。
我會說以上是最佳實踐,但這不是最常見的做法。 通常,REST服務由一些關系數據庫支持,並且在URI中經常使用整數代替自然鍵。
這意味着您的網址格式如下所示
/users/1234
這也意味着客戶端在創建新資源時不知道URI是什么。 通常的解決方法是不使用PUT
創建,而是使用某種收集資源並使用POST
創建新用戶:
POST /users/
一個好的API可能會返回一個Location
頭,該頭具有uri到新創建的資源。 一個好的客戶將知道,只要它在非安全方法之后收到Location
標頭,就應該清除該uri的緩存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.