背景
CANCEL 谓词,由 OAGi 定义为 OAGIS BOD 消息库的一部分。取消谓词用于请求消息,以请求服务器取消由指定的 URI 标识的"进程内"资源。有两种情况:
- 案例 1 - 资源已取消,但未删除,
- 案例 2 - 资源被取消和删除。
例如,在第一种情况下,考虑取消采购订单的请求,其中必须计算业务影响,并且删除的数据操作不能完全传达与含义关联的业务含义和所需的处理。在第二种情况下,请考虑取消约会的请求可能等效于简单的删除操作。在 REST API 中支持 CANCEL 谓词时存在一些替代方案。
第一个备选方案
CANCEL 谓词是 ActionVerbtype。
操作错误类型
所有操作谓词都包括其定义中用于表示和传达操作代码中指示的"创建","更新"和"删除"指令(即"添加","更改","删除"和"替换"操作代码)。
操作代码到 HTTP 动词映射
在 RESTful API 中,任何操作谓词的操作表达式.actionCode 与对应于操作代码的 HTTP 请求谓词进行通信,如下所示:
- 操作代码 = "添加" -- > HTTP 动词 = 开用
- 操作代码 = "更改" - > Http 动词 = NA (注意: 可以考虑补丁)
- 操作代码 = "删除" -- > HTTP 动词 = 删除
- 操作代码 = "替换" -- > Http 动词 = Put
与操作代码同步到事务用例映射
由于 HTTP 未指定 CANCEL 谓词的等效项,因此读者将引用以下事务模板:
- 案例 1(资源已取消但未删除):对于包含操作代码的取消消息 = "更改"或"替换",请使用事务用例模板 - 更改更新名词实例的状态,例如状态 = "已取消"
- 案例 2(资源被取消和删除):对于包含操作代码 = "删除"的取消消息,请使用事务用例模板 - 删除
第二种选择
CANCEL 谓词的案例 1 也可以作为控制器资源支持(请参阅 Masse,M.,REST API 设计规则手册,Oreilly Media,2012)。Masse 状态"REST API 依赖于控制器资源来执行应用程序特定的操作,这些操作无法逻辑地映射到标准方法之一(创建、检索、更新和删除,也称为 CRUD)。
由于 HTTP 将 POST 指定为"语义上无活动",因此 POST 方法用于调用控制器资源。控制器名称放置在 URI 路径的最后一段中。
POST https://application.domain.com/api/v1/employees/123/vacation-request/789/cancel