假设您有一项管理长期(自动)流程的服务。可以启动,暂停,恢复或取消流程。例如,考虑视频转换或3D打印。所有以前运行和当前正在运行的进程的列表始终可用。
我正在尝试将此概念映射到REST并遇到一些问题。
Start可能会映射到POST /processes
,但感觉很奇怪。开始不是创建,并且让POST
表示为某些集合创建项目,而为其他集合启动进程听起来令人困惑。但那部分不太重要。
暂停,恢复和取消是我绊倒的地方。我可能会将其视为PATCH
- 但RESTful和RPC方法之间的区别是什么?
但是,使用PATCH,随附的实体包含一组 说明资源当前如何驻留在 应修改原始服务器以生成新版本。
如果指令指定状态应设置为暂停,这似乎打破了封装并感觉任意 - 暂停可能不仅仅影响状态(任何内部任务等)。
如果指令字面上是pause
- 这样做会更好,但是如果所有客户端都必须知道这些特定消息,那么与RPC有什么好处呢?
答案 0 :(得分:1)
POST
到集合资源/processes
会创建一个处于默认状态的新进程。响应包含标题
Location: /processes/42
可以通过
检索此过程的状态GET /processes/42
可能是
{
"id": 42,
"state": "created"
}
如果客户想要改变这个过程的状态,他可以
POST /process/42
{
"state": "started"
}
请注意,JSON不完整。此模式通常用于对现有资源的POST
请求,并且可以解释为“使用提供的参数更新资源”。当然,服务器可以自由忽略此请求,因为服务器状态将被破坏或由于其他原因。
REST是关于资源及其表示。 REST客户端具有客户端状态,该状态可能与服务器状态不匹配。并非客户端请求的服务器状态中的每个转换都可行。