我将旧的CLI界面包装到Web服务/接口(使用JAX-RS)并尽可能使用REST样式。
该服务管理实体集合的CRUD,以及另外的[de]activate
操作对,它会更改实体的active
状态和属性。
对于单个实体,我已将activate / deactivate实现为:
Content-Type: text/plain
PUT /entities/{identifier}/active
DATA "true"|"false"
RESPONSE 303 Location: /entity/{identifier}
但是,CLI还提供了一次有效的操作来激活/停用所有实体。这实际上是一个全局批量更新操作,因为它(可能)会更改集合中每个实体的状态。
我正在寻找有关如何最好地通过网址表达此类全局操作的建议。我认为没有RESTful方式来表达它们,但很乐意得到纠正。是否有任何普遍接受或标准的URL样式?
到目前为止,我正在使用这个全球业务......
POST /entities/activate
POST /entities/deactivate
RESPONSE 204
...我意识到它不是远程RESTful,但至少有一个让人类客户端理解和调用简单的好处。我正在寻找一种更好的,希望是标准的方法来改善这一点。
(我还考虑使用/entities/all
伪元素,但决定它在服务器端使事情变得更复杂,对客户没有任何好处。)
回顾一下:
entities
的资源,它代表一个集合。entity
,由{identifier}
标识。active
。entities/{identifier}/active
上的POST(或PUT)公开该操作。更新
根据Jon的建议,实体集合的所有成员的激活/停用操作将变为:
Content-Type: text/plain
PUT /entities/active
DATA "true"|"false"
RESPONSE 204
答案 0 :(得分:1)
/entities/activate
代表什么。这件事与/entities/deactivate
有什么不同?如果我正在做一些改变它们(PUT
)或对它们采取行动(POST
)的事情,为什么我不能使用相同的资源来激活和停用?
这似乎没有多大意义。您似乎正在使用URI来识别操作。
然而,/entities/all
至少具有为单个资源使用单个标识符的优势(没有任何内容"伪"关于它,它不会真实比你制作的任何其他资源都多。)
/entities/
或许会更好。它是常见的,但肯定不是必需的,并且通常很有用(由于能够使用常见的相对URI路径,如../
),使路径组件中的步进标识符可以识别总数一组相关实体。
因此,让/entities/[some id]/
标识给定的实体,并PUT
将其描述为活动或非活动以更改它。然后让/entities/
代表所有这些,PUT
表示他们都处于活动状态或全部处于非活动状态,以便将它们全部设置为此类。