考虑以下http请求:
GET /defects?group-by=priority
我希望按缺陷的优先级对返回的缺陷集合(提要)进行分组。即,返回的Feed由缺陷(资源)和组信息组成。
我考虑过一些会在返回集合之前返回组标题和计数的事情,例如:
<content>
<Group val="High" count="567"/>
<Group val="Medium" count="437"/>
<Group val="Low" count="19"/>
<Defect ,,,,>
<Defect ,,,,>
<Defect ,,,,>
</content>
这种表示的问题是查询的资源(URL)有缺陷,因此客户端希望收集缺陷而不是Group元素。
我想解决这个问题的一种方法是为缺陷定义一个单独的组资源,即:
defects/groups?group1=priority
它将返回组及其数量的集合,然后客户端可以查询缺陷资源中的数据本身。但是这种设计很麻烦并且需要额外的往返行程,更不用说当在组资源的调用和缺陷资源之间添加/删除缺陷时可能出现的一致性问题。
最重要的是,返回一个按属性分组的元素集合的好方法是什么?
编辑我首先想到该问题应该由ATOM发布标准解决。但是即使ATOM解决了它,我仍然需要支持其他表示形式(XML,JSON),因此我正在寻找RESTful方法中更固有的模式。
最佳答案
我认为您的要求是不可能的。
如果客户希望收集缺陷,则可以按优先级排序,但是
a group of defects != a defect
因此,您无法返回组的集合。
您可以添加一个讨厌的技巧,以将属性添加到缺陷资源的优先级和优先级组大小,但这对我来说似乎很糟糕。
我认为正确的Restful方法是:
缺陷
或者
优先,让客户来做
资源分组和计数
在每个组中。
关于web-services - 用查询组成一个小组的 Restful 方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/424587/