有关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,并想知道答案。
答案 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 },
]