Rest 应该使用哪个URL更新集合所有成员的属性

Rest 应该使用哪个URL更新集合所有成员的属性,rest,http,Rest,Http,我正在将遗留CLI接口包装到web服务/接口中(使用JAX-RS),并尽可能使用REST样式 该服务管理实体集合的CRUD,以及一个附加的,[de]activate操作对,该操作对更改实体的活动状态和属性 对于单个实体,我已将激活/停用实施为: Content-Type: text/plain PUT /entities/{identifier}/active DATA "true"|"false" RESPONSE 303 Location: /entity/{identifier} 但是

我正在将遗留CLI接口包装到web服务/接口中(使用JAX-RS),并尽可能使用REST样式

该服务管理实体集合的CRUD,以及一个附加的,
[de]activate
操作对,该操作对更改实体的
活动状态和属性

对于单个实体,我已将激活/停用实施为:

Content-Type: text/plain
PUT /entities/{identifier}/active
DATA "true"|"false" 
RESPONSE 303 Location: /entity/{identifier}
但是,CLI还提供了一个有用的操作,可以一次激活/停用所有实体。这实际上是一个全局批量更新操作,因为它(可能)更改集合中每个实体的状态

我正在寻找关于如何最好地用URL表达这种全球操作的建议。我认为没有一种平静的方式来表达它们,但我很乐意被纠正。是否有任何普遍接受的或标准的URL样式

到目前为止,对于全球运营,我正在使用这个

POST /entities/activate
POST /entities/deactivate
RESPONSE 204
。。。我意识到它不是远程RESTful的,但至少有一个好处,即对于人类客户机来说,它的理解和调用非常简单。我正在寻找一个更好的,希望是标准的方法来改进这一点

(我还考虑过使用
/entities/all
伪元素,但认为它使服务器端的事情变得更复杂,对客户端没有好处。)

重述:


  • 我有一个名为
    entities
    的资源,它表示一个集合
  • 每个成员都是一个
    实体
    ,由其
    {identifier}
    标识
  • 每个实体都有许多属性,包括布尔状态属性:
    active
  • 可以通过调用操作来激活和停用每个实体
  • 对于单个实体,我通过
    entities/{identifier}/active
    上的POST(或PUT)公开该操作
  • 我认为这是合理的
  • 我想公开另一个操作,它激活/停用集合的所有成员
  • 我正在寻找一种标准的方法来表达这两个全局操作,它们在URL中更改集合所有成员的状态
更新

根据Jon的建议,实体集合所有成员的激活/停用操作应为:

Content-Type: text/plain
PUT /entities/active
DATA "true"|"false" 
RESPONSE 204

/entities/activate
代表什么。那东西与
/entities/deactivate
有何不同?如果我正在做一些改变它们的事情(
PUT
)或对它们采取行动(
POST
),为什么我不能使用与停用相同的资源来激活它们

这似乎没有多大意义。您似乎正在使用URI来标识操作

然而,
/entities/all
至少具有为单个资源使用单个标识符的优势(它没有什么“伪”的,它的真实性不亚于您创建的任何其他资源)

/entities/
可能会更好。让路径组件中的升级标识符标识一组相关实体的总数是很常见的,但肯定不是必需的,而且通常很有用(因为能够使用公共相对URI路径,如
。/


因此,让
/entities/[some id]/
识别一个给定的实体,然后
将它描述为活动或非活动的东西来改变它。然后让
/entities/
代表所有这些实体,并
放置
表示它们都处于活动状态或非活动状态的东西,以将它们全部设置为活动状态。

这个问题似乎是关于为URL选择最佳名称,因此似乎主要是一个意见问题,对吗?@Maximillian可能是这样。但我想问的是,对于这个普遍的问题,是否有任何公认的或标准的方法。好的,谢谢。因此,您建议使用显式的“all”(伪)成员或集合资源名称本身作为更改集合所有成员状态的操作的目标。有证据表明这是一种常见的方法吗?在服务器上打开目录浏览。转到浏览器中的目录。请注意,您收到的实体描述的资源是包含的资源的集合。这是同样的原则。一个相关的原则是你的
/entities/{identifier}/active
是个坏主意;什么是
/entities/{identifier}/active
?我有一个名为
entities
的资源,它表示一个集合。每个成员都是一个
实体
,由其
{identifier}
标识。每个实体都有一个布尔状态属性:
active
,可以通过调用操作来激活和停用。我通过
实体/{identifier}/active
上的POST(或PUT)公开该操作。我认为这是合理的。我的问题是关于全局操作(激活/停用集合的所有成员)。啊。我读到过,它暗示您有一个相反的
/deactivate
,因此使用URI来识别操作而不是实体。回到一般情况,在HTTP中,“更高级别”的集合资源是一种长期存在的方法,唯一新的是定义一个只表示部分更改的实体。或许,发布内容的争议会小一些。对于
/entities/are\u all\u active
,可能有一个很好的论据,即您可以更改以类似方式影响所有实体,这将有助于您快速发现它们是否全部、部分或全部处于活动状态。PUT在这两种方式中都有很好的优势,因为从HTTP使用单词的意义上讲,操作本质上是幂等的;将它们全部设置为活动状态,然后再次将它们全部设置为活动状态,效果与只执行一次相同。将它们全部设置为非活动状态,然后再次将它们全部设置为非活动状态,效果与您刚才所做的相同