以PUT与PATCH为例

时间:2016-11-16 05:54:15

标签: json rest api

有关REST API设计的最佳实践的问题

假设我只想更新客户的一个属性(lastN)

{id:1,firstN:fb,lastN:ln,dept:201,region:NA}  

然后可以/应该发送 带PATCH / PUT或两者的{id:1,lastN:newLn}? 带有PUT / PATCH或两者的{id:1,firstN:fb,lastN:newLn,dept:201,region:NA}

我已经问了类似(不同)的问题here,并想知道答案。

1 个答案:

答案 0 :(得分:4)

PUT应该用于更新整个资源。对于部分更新,PATCH是正确的动词。

但是,PATCH不是PUT的直接替代品。如果您只想发送部分属性来添加/更新,则应使用内容类型“application / merge-patch + json”。正文只包含修改过的属性。

https://tools.ietf.org/html/rfc7396

Content-Type: application/merge-patch+json

{firstN:newFn,region:null,middleName:newMn}

另一个更具描述性的替代方法是使用实​​际定义操作的JSON Patch文档。

https://tools.ietf.org/html/rfc6902#section-3

Content-Type: application/json-patch+json

[
   { "op": "add", "path": "/middleName", "value": newMn },
   { "op": "remove", "path": "/region" },
   { "op": "replace", "path": "/firstN", "value": newFn },
]