gpt4 book ai didi

rest - 更新 RESTful 资源中的复合实体

转载 作者:行者123 更新时间:2023-12-04 07:36:25 24 4
gpt4 key购买 nike

我有一个具有多个属性的实体,比如“项目”。除了简单的属性外,项目可能有一个“状态”列表,其中最后一个是当前状态。我有一个 Web 表单来创建/编辑项目。该项目的所有属性都可以在此表单中更改,用户也可以为项目添加新状态(但不能更改或删除旧状态)。

项目状态是纯粹的复合实体,它们在项目范围之外没有任何独特的含义或身份,也不能直接寻址,因此它们显然不值得一个特殊的根 REST 资源。

根据 REST 架构,我创建了一个名为/projects 的资源。 POST 用于创建新项目,PUT 用于更改现有项目。

但是,我不希望客户把项目和它所有的历史状态都放在一起,一是这个集合太重,二是业务逻辑只允许添加状态,不能更改或删除状态,所以PUTting项目无论如何,连同它的所有状态都没有任何意义。

PUT 一个只有新状态的项目也不是一种选择,因为它违反了 PUT 的幂等性。

我也不喜欢在第二个 HTTP 请求中发布状态的想法,比如/project/{id}/status,因为从用户的角度来看,这会破坏更新操作的原子性。如果第二个请求在网络上丢失,那么该项目对于编辑它的用户来说将显得不一致(属性已更改,但状态保持不变)。对于更新一个看似单一的实体的简单任务来说,创建 RESTful“事务”似乎有点矫枉过正(而且容易出错)。

这种问题在我的工作中非常普遍,可以概括为:更新业务逻辑只允许部分更新的复杂复合实体的 REST 完全正确和原子方式是什么?

最佳答案

你需要 HTTP PATCH 吗?它是表达对资源的增量更新的动词。

http://tools.ietf.org/html/rfc5789

关于rest - 更新 RESTful 资源中的复合实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30439979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com