PATCH方法是否应该返回响应体中资源的所有字段?
或者它应该只返回更新的字段?
我正在阅读this
例如,如果它只返回更新的字段,则用户可以知道服务器中哪些字段已更新,而用户更新了一些字段。
**Users resource representations**
name: string
age: number
createdon: date
modifiedon: date
PATCH /users/{userId}
Request body
{
name: 'changedname',
}
Response body Case1
{
name: 'changedname',
age: 20,
createdon: 2016-01-01,
modifiedon: 2016-06-09
}
Response body Case2
{
name: 'changedname',
modifiedon: 2016-06-09
}
答案 0 :(得分:14)
通常应该通过content negotiation处理。换句话说,如果需要,客户端会询问特定的表示。请求看起来像这样:
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.user+json
...
在这种情况下,客户端表示它想要一个完整的user
表示作为答案。或者它可以做:
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.object-fragment+json
...
要求某个对象的通用片段表示。
如果您不想这样做,则不必实施这两种操作,在这种情况下,您只需执行用例并使用406 Not Acceptable
回复media-types
支持当下。
答案 1 :(得分:4)
PATCH的规范并未强制要求。
如果你想控制它,你可能想看看https://greenbytes.de/tech/webdav/rfc7240.html#return的灵感。
答案 2 :(得分:1)
我不认为REST规范(顺便说一句,我认为你需要为此考虑RFC 6902)强制执行任何强有力的规则(你应该返回什么)。我宁愿返回整个资源,以便客户端可以以任何方式使用它。从理论上讲,客户端自己知道什么被修补(至少是请求是什么)。从服务器获得确认可能并不简单(特别是考虑到PATCH主要用于集合),或者至少不值得。