将处理控制映射到REST

时间:2013-10-26 13:10:24

标签: rest

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

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

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

暂停,恢复和取消是我绊倒的地方。我可能会将其视为PATCH - 但RESTful和RPC方法之间的区别是什么?

  

但是,使用PATCH,随附的实体包含一组   说明资源当前如何驻留在   应修改原始服务器以生成新版本。

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

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

1 个答案:

答案 0 :(得分:1)

POST到集合资源/processes会创建一个处于默认状态的新进程。响应包含标题

Location: /processes/42

可以通过

检索此过程的状态
GET /processes/42

可能是

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

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

POST /process/42

{
  "state": "started"
}

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

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