REST API设计资源,具有许多基于资源状态的操作

时间:2015-11-22 09:42:18

标签: rest

我正在为用户管理设计一个REST API,它必须支持以下CRUD操作:

  • 创建新用户(POST /users
  • 更新现有用户(PUT /users/{userid}
  • 删除用户(DELETE /users/{userid}
  • 获取用户详细信息(获取/users/{userid}

以及取决于用户状态的操作:

  • 激活用户
  • 阻止用户
  • 取消阻止用户
  • 暂停用户
  • 归档用户

上述请求的有效负载不包含用户表示。它包含诸如例如为什么被阻止/暂停/存档的共鸣。

根据良好的REST设计实践,URI不应该是API操作,因此还有其他方法,例如POST /users/{userid}/activate如何实施此类操作?

2 个答案:

答案 0 :(得分:2)

根据Roy T. Fielding的论文,any information that can be named can be a REST resource

  

5.2.1.1资源和资源标识符

     

REST中信息的关键抽象是一种资源。可以命名的任何信息都可以是资源:文档或图像,临时服务(例如“洛杉矶的今天天气”),其他资源的集合,非虚拟对象(例如人)等等。换句话说,任何可能是作者超文本引用目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是与任何特定时间点的映射相对应的实体。 [...]

由于状态属于用户,因此状态可以作为子资源进行管理用户资源。

要实现这一目标,您可以使用/users/{userid}/status之类的网址。

可以在此网址上执行

POSTPUT,发送相关信息以更改用户状态

答案 1 :(得分:1)

例如,有两种可能的选择:

  • 将动作建模为用户资源的一部分(例如,引入可以设置的存档标志)。当然,使用这种方法可以传递额外的事件信息(原因是他被归档/阻止/ ...)。
  • 创建一个单独的REST资源,例如/api/archivedUsers/您可以在其中发布由用户URI和其他事件数据组成的元组
这两种方法都有共同点,它们试图模拟用户对象的状态(类似REST),而不是对它执行操作(感觉类似于RPC)。您还可以查看此文章:REST API design resource modeling