是否应该在 REST API PUT 请求中传递资源及其相关资源的所有字段?
Should all the fields of a resource and its related resources be passed in a REST API PUT request?
假设我有票和评论资源。工单可以有很多评论。在您的更新端点 HTTP PUT /api/tickets/<ticket_id>/
中,我是否应该要求客户端在更新票证时传递票证的所有字段及其所有评论?
我问了一些开发人员,他们中的一些人说我应该只传递将要修改的字段,因为它更轻、性能更快且更易于使用。有人说我应该传递票证的所有字段及其所有评论,因为 PUT 请求应该是幂等的。但我担心的是当评论太多时,负载会很大。
是的,因为 PUT 请求应该完全替换要更新的实体。如果您想对实体进行部分更新,请使用 PATCH 请求。
另见 the rfc 以供参考
PATCH Method for HTTP
Several applications extending the Hypertext Transfer Protocol (HTTP)
require a feature to do partial resource modification.
The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource.
因此,在您的情况下,使用 PATCH 请求进行部分更新可能效率更高。
假设我有票和评论资源。工单可以有很多评论。在您的更新端点 HTTP PUT /api/tickets/<ticket_id>/
中,我是否应该要求客户端在更新票证时传递票证的所有字段及其所有评论?
我问了一些开发人员,他们中的一些人说我应该只传递将要修改的字段,因为它更轻、性能更快且更易于使用。有人说我应该传递票证的所有字段及其所有评论,因为 PUT 请求应该是幂等的。但我担心的是当评论太多时,负载会很大。
是的,因为 PUT 请求应该完全替换要更新的实体。如果您想对实体进行部分更新,请使用 PATCH 请求。
另见 the rfc 以供参考
PATCH Method for HTTP
Several applications extending the Hypertext Transfer Protocol (HTTP) require a feature to do partial resource modification.
The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource.
因此,在您的情况下,使用 PATCH 请求进行部分更新可能效率更高。