【发布时间】:2015-09-13 21:08:20
【问题描述】:
我将旧版 CLI 接口封装到 Web 服务/接口中(使用 JAX-RS)并尽可能使用 REST 样式。
该服务管理实体集合的 CRUD,以及一个额外的 [de]activate 操作对,它更改实体的 active 状态和属性。
对于单个实体,我已将激活/停用实现为:
Content-Type: text/plain
PUT /entities/{identifier}/active
DATA "true"|"false"
RESPONSE 303 Location: /entity/{identifier}
但是,CLI 还提供了一个有用的操作来一次激活/停用所有实体。这实际上是一个全局批量更新操作,因为它(可能)改变集合中每个实体的状态。
我正在寻找有关如何最好地使用 URL 表达此类全局操作的建议。我认为没有 RESTful 方式来表达它们,但很高兴得到纠正。是否有任何普遍接受或标准的 URL 样式?
到目前为止,对于我正在使用的全局操作...
POST /entities/activate
POST /entities/deactivate
RESPONSE 204
...我意识到这不是远程 RESTful,但至少具有易于人类客户理解和调用的好处。我正在寻找一种更好的、希望是标准的方法来改进这一点。
(我也考虑过使用/entities/all 伪元素,但认为它使服务器端的事情变得更加复杂,对客户端没有任何好处。)
回顾一下:
- 我有一个名为
entities的资源,它代表一个集合。 - 每个成员都是一个
entity,由其{identifier}标识。 - 每个实体都有许多属性,包括一个布尔状态属性:
active。 - 可以通过调用操作来激活和停用每个实体。
- 对于单个实体,我通过
entities/{identifier}/active上的 POST(或 PUT)公开该操作。 - 我认为这是合理的。
- 我想公开另一个操作,它激活/停用集合的所有成员。
- 我正在寻找一种标准方法来表达这两个全局操作,它们会在 URL 中更改集合的所有成员的状态。
更新
根据 Jon 的建议,实体集合所有成员的激活/停用操作应变为:
Content-Type: text/plain
PUT /entities/active
DATA "true"|"false"
RESPONSE 204
【问题讨论】:
-
这个问题似乎是关于为您的 URL 选择最佳名称,所以这似乎主要是一个意见问题,对吧?
-
@Maximillian 也许是这样。但我要问的是,对于这个普遍问题,是否有任何公认的或标准的方法。