簡體   English   中英

REST API upsert端點與創建和更新端點

[英]REST API upsert endpoint vs create and update endpoints

我正在編寫一個REST API,其余的用於創建/更新/刪除用戶。

編寫創建/更新用戶端點的最佳實踐是什么?

  1. 一個端點同時處理創建和更新(= upsert)用戶的POST請求。
  2. 兩個不同的端點-一個用於處理創建用戶POST請求,另一個用於處理更新用戶PATCH請求。

這里有很多錯誤的假設。 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM