Api 如何在处理PUT调用时有效地检查ressource字段是否已更新

Api 如何在处理PUT调用时有效地检查ressource字段是否已更新,api,django-rest-framework,put,restful-architecture,Api,Django Rest Framework,Put,Restful Architecture,选项1:如果前端未更新,则发送空字段。检查背面是否为空 选项2:如果未更新,则不在请求中包含字段。检查背面是否存在字段 选项3:在前面发送字段值,即使它与旧值相同。检查请求字段是否与后面的数据库现有值相同。请求的语义是,主体完全代表资源的新状态。客户端发送的表示应该完全覆盖数据层中的现有表示 根据您的选择,缺失的属性可以默认为空/空,也可以导致422无法处理的实体(或者400错误请求,如果您对WebDAV过敏)。在数据层中,任何具有空/null值的属性都将设置为空/null 可能不需要检查字段是

选项1:如果前端未更新,则发送空字段。检查背面是否为空

选项2:如果未更新,则不在请求中包含字段。检查背面是否存在字段


选项3:在前面发送字段值,即使它与旧值相同。检查请求字段是否与后面的数据库现有值相同。

请求的语义是,主体完全代表资源的新状态。客户端发送的表示应该完全覆盖数据层中的现有表示

根据您的选择,缺失的属性可以默认为空/空,也可以导致
422无法处理的实体
(或者
400错误请求
,如果您对WebDAV过敏)。在数据层中,任何具有空/null值的属性都将设置为空/null

可能不需要检查字段是否相同。只要把数据库里的东西敲一下就行了


如果您想更新字段子集,您需要
补丁
发布
、或微资源和
放置

我们使用放置请求部分更新一个字段或字段的任意组合,这提供了很大的灵活性(一条路径用于多个用户案例)。如果我们按照您的回答中的建议进行操作,API客户端(角度SPA)将有义务获取所有字段值,即使我们只需要更新一个字段值,此类信息并不总是可用的。如果我只需要更新数据,为什么我需要获取并发送所有用户15个字段age@user2080105这样做违反了中阐述的PUT的语义。没有网络警察阻止你,但是你应该知道你忽略了规范,失去了PUT的幂等性()。你可能想考虑我建议的替代方案。