2014-12-05 32 views
2

我有一個REST URI的設計問題。REST URI設計:如何更新

假設我有一個汽車資源(這是與一些屬性映射到數據庫中)。 如果我想更新與另一輛車的信息資源車,我知道,我可以打電話

PUT /base_url/api/cars/1 

I update the car with id == 1 with the informations in the request body 

但是如果我想更新ID == 1汽車與汽車用ID信息== 2 ? (我想只傳遞id,因爲副本由服務器在內部處理) 如何設計這種類型的請求在休息?

回答

1

您應該使用PATCH來代替。

的PUT和PATCH請求之間的差異反映在 服務器處理封閉實體來修改由Request-URI所標識的資源 的方式。在PUT請求中, 封閉實體被認爲是存儲在原始服務器上的 資源的修改版本,並且客戶端請求 存儲的版本將被替換。但是,對於PATCH, 封閉實體包含一組說明如何修改當前駐留在源服務器上的 資源以產生新版本的指令集 。 PATCH方法影響由Request-URI標識的資源 ,並且它也可能對 其他資源產生副作用;即可以通過應用PATCH創建新的資源,或者修改現有的資源。

像這樣的事情會好起來的:

PATCH /base_url/api/cars/1 
{template: {id: 2}} 

不要在查詢發送ID,因爲它是URI,這是金目標資源的標識符。

1

我會對這個URI做一個PUT請求:PUT /base_url/api/cars/1?clone = 2,並傳遞信息(在JSON體中)。

在後端,我會找到car#2的數據,並將它與我從請求中獲得的數據合併。

這樣您就可以克隆資源並同時修改其屬性。