REST获取不在集合中的项
导言 假设我有一个rest服务,它返回项目:REST获取不在集合中的项,rest,search,Rest,Search,导言 假设我有一个rest服务,它返回项目: GET /items GET /items/7 POST /items etc. 我们还有几组项目: GET /groups GET /groups/16 POST /groups etc. 然后我们可以获得特定组中的项目: /items?groupid=16 这一切都很直截了当 问题 既然我们有了一种获取特定组中的项目的方法,那么我们是否也应该提供一种获取不在特定组中的项目的方法?为什么?因为如果客户机想要向组中添加项目,它必须知道哪
GET /items
GET /items/7
POST /items
etc.
我们还有几组项目:
GET /groups
GET /groups/16
POST /groups
etc.
然后我们可以获得特定组中的项目:
/items?groupid=16
这一切都很直截了当
问题
既然我们有了一种获取特定组中的项目的方法,那么我们是否也应该提供一种获取不在特定组中的项目的方法?为什么?因为如果客户机想要向组中添加项目,它必须知道哪些项目尚未添加
我看到两种选择:
/items?groupid=!16
or
/items?q=groupid<>16
/items?groupid=!16
或
/项目?q=groupid16
我觉得这会导致搜索查询的功能请求源源不断
公元2年
客户机可以首先获取所有项目。接下来,客户机可以获取组16中的所有项目。对这两个集合进行差异分析,得到不在第16组中的项目
这样,客户机就需要进行更多的编码,处理集合,将它们保存在内存中等等。另一方面,它不需要学习特定的查询语法
在这个主题上有什么最佳实践吗?首先,我会使用不同的URL来获取组中的项目:
GET /groups/16/items
这将返回组16中所有项目的集合资源。要将项目添加到组中
POST /groups/16/items
可以使用
无论项目是否已在组中,向组中添加项目都将产生相同的结果。在这两种情况下,客户只关心结果:他希望项目在组中。如果已经是,好吧,如果不是,现在就是了
因此,我看不到获取不在组中的项目的任何用例。也许允许客户端将新项目发布到所需的组中是一种可行的方法 无论如何,在验证过程中,您可以接受不预先存在的项,也可以拒绝它,因为它已经存在
基于@Tichodroma的URL,您可能有:
GET/groups/16/non-items您认为客户寻找与特定价值不匹配的东西有什么价值吗?如果是这样,您可以完全添加该选项,客户将乐于处理查询语法。根据我的经验,人们通常会寻找一些东西,例如
groupId=XX
,我从来没有被要求支持某些东西不等于某个值的选项。客户希望向组中添加项目。为此,客户端必须知道哪些项目还不属于该组。用例:在屏幕的左侧显示该组中的项目,在右侧显示可以选择添加到该组中的项目。如果所有项目都在组中,我希望可供选择的项目列表为空。我将处理该客户端。不过,这需要两个REST调用。客户端可以轻松处理您的用例:1)获取所有项,2)获取组中的项,3)计算不同的值。