我看到很多关于如何使用 REST 只更新部分资源(例如状态指示器)的问题。
选项似乎是:
抱怨 HTTP 没有 PATCH 或 MODIFY 命令。然而,接受的答案REST 的 HTTP MODIFY 动词? https://stackoverflow.com/questions/1672025/http-modify-verb-for-rest很好地说明了为什么这不像看起来那么好。
使用带有参数的 POST 并标识一个方法(例如名为“action”的参数)。一些建议是指定具有自定义方法名称的 X-HTTP-Method-Override 标头。这似乎会导致根据您想要做的事情在实现中进行切换的丑陋,并且会接受批评,因为它不是一种特别 RESTful 的 POST 使用方式。事实上,采用这种方法开始感觉像是 RPC 类型的接口。
使用 PUT 覆盖资源的子资源,该子资源表示要更新的特定属性。事实上,这实际上是对子资源的覆盖,这似乎符合 PUT 的精神。
在这一点上,我认为#3是最合理的选择。
这是最佳实践还是反模式?还有其他选择吗?
有两种方法可以查看状态更新。
更新一个东西。这是一个 PUT。选项3
将额外的日志条目添加到事物的历史记录中。此日志条目序列中的列表项是当前状态。那是一个帖子。选项 2。
如果您是数据仓库或函数式编程类型,您往往不信任状态更改,并且喜欢将新的历史事实发布到静态的、不可变的事物中。这确实需要将事物与事物的历史区分开来。导致两张表。
否则,您不介意通过“更新”来改变事物的状态,并且您对 PUT 感到满意。这不会区分事物及其历史,并将所有内容保留在一张表中。
就我个人而言,我发现我对可变对象和 PUT 越来越不信任(“错误纠正”除外)。 (即便如此,我认为旧的东西可以保留在原处,而新的东西可以参考其先前版本来添加。)
如果状态发生变化,我认为应该有一个状态日志或历史记录,并且应该有一个 POST 来向该历史记录添加新条目。可能有一些优化来反映适用于此的对象的“当前”状态,但这只是幕后优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)