REST URI设计:如何更新

时间:2014-12-05 11:48:23

标签: web-services rest http uri

我有一个REST URI的设计问题。

假设我有一个Car资源(在数据库中映射了一些属性)。 如果我想用另一辆车的信息更新汽车资源我知道我可以打电话

PUT /base_url/api/cars/1

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

但是,如果我想用id == 1更新汽车的id == 1的汽车信息? (我想只传递id,因为副本是由服务器内部处理的) 我如何在休息时设计这种类型的请求?

2 个答案:

答案 0 :(得分:1)

我会向此URI发出PUT请求:PUT / base_url / api / cars / 1?clone = 2 ,并传递信息(在JSON正文中)。

在后端,我会找到汽车#2的数据,并将其与我从请求中获得的数据合并。

通过这种方式,您可以克隆资源,同时修改其属性。

答案 1 :(得分:1)

您应该使用PATCH。

  

PUT和PATCH请求之间的区别反映在   服务器处理封闭实体以修改的方式   Request-URI标识的资源。在PUT请求中,   封闭的实体被认为是该的修改版本   存储在源服务器上的资源,客户端正在请求   存储的版本被替换。然而,有了PATCH,   封闭实体包含一组描述如何的指令   应修改当前驻留在源服务器上的资源   制作新版本。 PATCH方法会影响资源   由Request-URI标识,它也可能有副作用   其他资源;即,可以创建或存在新资源   通过应用PATCH进行修改。

这样的事情就可以了:

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

不要在查询中发送id,因为它是URI的一部分,URI是目标资源的标识符。