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 这一切都很直截了当 问题 既然我们有了一种获取特定组中的项目的方法,那么我们是否也应该提供一种获取不在特定组中的项目的方法?为什么?因为如果客户机想要向组中添加项目,它必须知道哪

导言

假设我有一个rest服务,它返回项目:

GET /items
GET /items/7    
POST /items
etc.
我们还有几组项目:

GET /groups
GET /groups/16
POST /groups
etc.
然后我们可以获得特定组中的项目:

/items?groupid=16
这一切都很直截了当

问题

既然我们有了一种获取特定组中的项目的方法,那么我们是否也应该提供一种获取不在特定组中的项目的方法?为什么?因为如果客户机想要向组中添加项目,它必须知道哪些项目尚未添加

我看到两种选择:

  • 我们提供了一些查询数据的方法
  • 什么都不要做,让客户来处理
  • 公元1年

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

    /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)计算不同的值。