0

假设您有一个管理长时间运行(自动)流程的服务。流程可以开始、暂停、恢复或取消。例如,考虑视频转换或 3D 打印。所有以前运行和当前运行的进程的列表始终可用。

我正在尝试将此概念映射到 REST 并遇到一些问题。

Start 可能会映射到POST /processes,但感觉很奇怪。开始不是创建,并且POST对于某些集合意味着创建项目,而为其他集合启动过程听起来令人困惑。但这部分不太重要。

暂停、恢复和取消是我绊倒的地方。我可能会认为它是PATCH——但是 RESTful 和 RPC 方法之间有什么区别呢?

然而,对于 PATCH,封闭的实体包含一组指令,描述如何修改当前驻留在源服务器上的资源以生成新版本。

如果指令指定状态应该设置为暂停,这似乎破坏了封装并且感觉随意——暂停可能影响的不仅仅是状态(任何内部任务等)。

如果指令是字面上的pause——这更好,但是如果所有客户端都必须知道这些特定消息,那么与 RPC 相比有什么好处?

4

1 回答 1

1

POST集合资源/processes在默认状态下创建一个新进程。响应包含一个标头

Location: /processes/42

这个过程的状态可以通过

GET /processes/42

这可能是

{
  "id": 42,
  "state": "created"
}

如果客户想改变这个进程的状态,他可以

POST /process/42

{
  "state": "started"
}

请注意,JSON 不完整。此模式通常用于POST对现有资源的请求,可以解释为“使用提供的参数更新资源”。当然,服务器可以自由地忽略此请求,因为服务器状态会被破坏或由于其他原因。

REST 是关于资源及其表示的。REST 客户端的客户端状态可能与服务器状态不匹配。并非客户端请求的服务器状态的每次转换都是可行的。

于 2013-10-26T13:24:35.350 回答