我有一个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,因为副本是由服务器内部处理的) 我如何在休息时设计这种类型的请求?
答案 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是目标资源的标识符。