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 以获取灵感。
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 以获取灵感。