PATCH 方法是否应该 return 响应主体中资源的所有字段?

Should the PATCH method return all fields of the resource in the response body?

PATCH 方法是否应该 return 响应主体中资源的所有字段?
还是应该 return 只更新字段?

我正在阅读this

例如,如果return只更新字段,用户可以知道服务器中更新了哪些字段,而用户更新了一些字段。

**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
}

我不认为 REST 规范(顺便说一句,我认为您需要为此查看 RFC 6902)对此强制执行任何严格的规则(您应该 returning)。我宁愿 return 整个资源,以便客户可以按需要使用它。从理论上讲,客户端本身知道修补了什么(至少请求是什么)。从服务器获取确认可能并非易事(特别是考虑到 PATCH 主要用于集合),或者至少不值得。

通常这应该通过 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那一刻。

PATCH 规范对此没有强制要求。

如果您想控制它,您可能需要查看 https://greenbytes.de/tech/webdav/rfc7240.html#return 以获取灵感。