REST获取不在集合中的项目

时间:2015-04-29 06:13:27

标签: rest search

简介

假设我有一个返回项目的休息服务:

GET /items
GET /items/7    
POST /items
etc.

我们还有一组项目:

GET /groups
GET /groups/16
POST /groups
etc.

然后我们可以获取特定组中的项目:

/items?groupid=16

这一切都很直接。

问题

现在我们有办法获取特定组中的项目,我们是否还应该提供一种获取不属于特定组的项目的方法?为什么?因为如果客户想要将项目添加到组中,则必须知道尚未添加哪些项目。

我看到两个选项:

  1. 我们提供了一些查询数据的方法
  2. 不要做任何事情,让客户处理它。
  3. 广告1。

    我们可以提供一种查询/搜索数据的方法,如下所示:

    /items?groupid=!16
    or
    /items?q=groupid<>16
    

    我觉得这会导致搜索查询的功能请求永无止境。

    广告2。

    客户可以先获取所有商品。接下来,客户端可以获取组16中的所有项目。对这两个集合执行差异会使项目不在组16中。

    这样客户端必须进行更多编码,并使用集合,将它们保存在内存中等。另一方面,它不需要学习特定的查询语法。

    这个主题是否有最佳实践?

2 个答案:

答案 0 :(得分:1)

首先,我使用不同的网址来获取组中的项目:

GET /groups/16/items

这将返回组16中所有项目的收集资源。要项目添加到组,

POST /groups/16/items

可以使用。

向组中添加项目将具有相同的结果,无论该组中是否已存在该项目。在这两种情况下,客户只关心结果:他希望项目在组中。如果已经存在,那很好,如果没有,现在就是。

因此,我没有看到任何用于获取不在群组中的项目的用例。

答案 1 :(得分:0)

或许允许客户将新项目发布到所需的组可能是最佳选择。

在验证过程中,无论如何,您可以接受不存在的项目或拒绝它,因为它已经存在。

基于@Tichodroma的URL,您可能有:

GET / groups / 16 /非物品