Zur*_*oen 5 rest transition state-machine
在REST中 - 可恢复的DELETE给出了关于如何在REST中建模状态变化的很好的介绍.基本上,如果您拥有具有字段状态的资源,则只需将该资源的新版本添加到更新状态字段.
在本主题中,我想扩展此模型.假设您有一个可以处于两种状态的资源:1和2.与引用帖子中描述的简单模型相比,有三个转换从状态1遍历到状态2,而不是仅仅一个.
我的问题是:你如何在REST中模拟状态转换?
我自己不能想出一个类似RPC的POST,它可能不是非常RESTian:
POST http://server/api/x
target_state=2&transition=3
Run Code Online (Sandbox Code Playgroud)
这通过使用转换3 将资源x从状态1 改变为状态2.
这实际上并不局限于 REST;这更多是关于状态机的基本问题。状态机应该封装所有状态,这样,如果您发现自己创建了从一种状态到另一种状态的多个转换,并且差异很大,那么也必须在状态中捕获该差异。
比如说我没有家。我可以通过三种方式从“无家可归”状态转变为“有家”状态:我可以租一台,我可以买一台,我可以偷一台。从“无家可归”到“有家”的三个转变?不是在机器的世界里。差异要么显着,要么不显着。如果不是,那么对于机器来说根本没有必要进行区分。只需放置“家”的新身份即可。如果是的话,那么我们需要扩展我们的国家概念以涵盖差异。例如:
homeless
A A A
/ | \
V | V
possessor <--|--- renter
A | /
\ | /
V V V
owner
Run Code Online (Sandbox Code Playgroud)
通过偷房子,我可以从无家可归者变成拥有者。如果我蹲得足够久,我可能会成为它的主人。或者我可能无家可归,租一套房子,甚至先租后买。或者我可以直接买一个。所有这三个路径都让我进入“所有者”状态,但它们使用中间状态来表示显着不同的转换。
如果您想表示“无家可归者”与“在家里”(拥有者|租客|所有者),那么将其本身公开为只读的计算资源是没有问题的。只是不要让任何人对其进行 PUT/POST,因为转换是不明确的。如果状态很重要,那么将状态转换的历史记录作为一组附加资源也没有问题。
| 归档时间: |
|
| 查看次数: |
2704 次 |
| 最近记录: |