可以使用补丁而不是放置来进行完整更新吗?
Is it okay to use patch for full update instead of put?
我正在为 API 使用 Django 和 DRF。假设我有一个包含三个字段(名称、密码、电子邮件)的对象。当用户想要同时更新他的姓名、密码和电子邮件时,我可以发送 PATCH
请求而不是 PUT
请求吗?缺点是什么?
我觉得这比检查用户是否正在更新所有字段更方便,如果是,则使用 PUT
请求,如果不是,则使用 PATCH
.
检查对象是否存在已经在后端处理,创建对象时,我使用CREATE / POST
而不是PUT
,因为它对我来说更方便。
编辑:我正在使用 AngularJS 的 PATCH
: https://docs.angularjs.org/api/ng/service/$http#patch 将内容发送到后端,由 DRF Viewset 处理(处理 PATCH
个请求)。
用PATCH就可以了。但是,请注意,与 PUT 不同,它不会检查必填字段。
除非您使用已定义 PATCH 语义的媒体类型,否则不能使用 PATCH。 "application/json" 没有。
参见https://www.rfc-editor.org/errata_search.php?eid=3169:
If the operation does not modify the resource identified by the
Request-URI in a predictable way that's defined by the semantics
of the PATCH media type, POST should be considered instead of
PATCH or PUT.
FWIW,请参阅 RFC 6902 和 RFC 7386 了解您可以使用的类型。
我正在为 API 使用 Django 和 DRF。假设我有一个包含三个字段(名称、密码、电子邮件)的对象。当用户想要同时更新他的姓名、密码和电子邮件时,我可以发送 PATCH
请求而不是 PUT
请求吗?缺点是什么?
我觉得这比检查用户是否正在更新所有字段更方便,如果是,则使用 PUT
请求,如果不是,则使用 PATCH
.
检查对象是否存在已经在后端处理,创建对象时,我使用CREATE / POST
而不是PUT
,因为它对我来说更方便。
编辑:我正在使用 AngularJS 的 PATCH
: https://docs.angularjs.org/api/ng/service/$http#patch 将内容发送到后端,由 DRF Viewset 处理(处理 PATCH
个请求)。
用PATCH就可以了。但是,请注意,与 PUT 不同,它不会检查必填字段。
除非您使用已定义 PATCH 语义的媒体类型,否则不能使用 PATCH。 "application/json" 没有。
参见https://www.rfc-editor.org/errata_search.php?eid=3169:
If the operation does not modify the resource identified by the Request-URI in a predictable way that's defined by the semantics of the PATCH media type, POST should be considered instead of PATCH or PUT.
FWIW,请参阅 RFC 6902 和 RFC 7386 了解您可以使用的类型。