Rest PATCH方法是否应返回响应正文中资源的所有字段?
补丁方法是否应返回响应正文中资源的所有字段?Rest PATCH方法是否应返回响应正文中资源的所有字段?,rest,http,httprequest,restful-architecture,httpverbs,Rest,Http,Httprequest,Restful Architecture,Httpverbs,补丁方法是否应返回响应正文中资源的所有字段? 还是只返回更新的字段? 我在看书 例如,如果只返回更新的字段,则用户可以知道服务器中更新了哪些字段,而用户更新了一些字段。 **Users resource representations** name: string age: number createdon: date modifiedon: date 我不认为REST规范(顺便说一句,我认为您需要了解这一点)强制执行任何关于这一点的强大规则(您应该返回的内容)。我宁愿返回整个资源,以便
还是只返回更新的字段?
我在看书 例如,如果只返回更新的字段,则用户可以知道服务器中更新了哪些字段,而用户更新了一些字段。
**Users resource representations**
name: string
age: number
createdon: date
modifiedon: date
我不认为REST规范(顺便说一句,我认为您需要了解这一点)强制执行任何关于这一点的强大规则(您应该返回的内容)。我宁愿返回整个资源,以便客户机可以以任何需要的方式使用它。从理论上讲,客户机本身知道修补了什么(至少请求是什么)。从服务器获得确认可能不是一件小事(特别是考虑到修补程序主要用于收集),或者至少不值得。通常情况下,这应该通过。换句话说,如果客户需要一个特定的表示,它会要求一个特定的表示。请求如下所示:
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.user+json
...
在这种情况下,客户机表示它想要一个完整的用户
表示作为答案。或者它可以做到:
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.object-fragment+json
...
请求某个对象的通用片段表示
如果您不想实现这两种功能,您不必同时实现,在这种情况下,您只需执行您的用例,并用
406 Not Acceptable
响应到媒体类型,而您目前不支持这些类型。补丁规范并不强制要求这样做
如果你想控制它,你可能需要寻找灵感。RFC 5789第2.1节中有一个定义:尽管奇怪的是,它提到了一个文档,但没有其他内容<代码>对现有文本文件的成功修补程序响应:HTTP/1.1 204无内容位置:/file.txt ETag:“e0023aa4f”
但是,它也表示:注意,也可以使用其他成功代码。
(除了204)
Response body Case2
{
name: 'changedname',
modifiedon: 2016-06-09
}
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.user+json
...
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.object-fragment+json
...