简介
假设我有一个返回项目的休息服务:
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
我觉得这会导致搜索查询的功能请求永无止境。
广告2。
客户可以先获取所有商品。接下来,客户端可以获取组16中的所有项目。对这两个集合执行差异会使项目不在组16中。
这样客户端必须进行更多编码,并使用集合,将它们保存在内存中等。另一方面,它不需要学习特定的查询语法。
这个主题是否有最佳实践?
答案 0 :(得分:1)
首先,我使用不同的网址来获取组中的项目:
GET /groups/16/items
这将返回组16中所有项目的收集资源。要将项目添加到组,
POST /groups/16/items
可以使用。
向组中添加项目将具有相同的结果,无论该组中是否已存在该项目。在这两种情况下,客户只关心结果:他希望项目在组中。如果已经存在,那很好,如果没有,现在就是。
因此,我没有看到任何用于获取不在群组中的项目的用例。
答案 1 :(得分:0)
或许允许客户将新项目发布到所需的组可能是最佳选择。
在验证过程中,无论如何,您可以接受不存在的项目或拒绝它,因为它已经存在。
基于@Tichodroma的URL,您可能有:
GET / groups / 16 /非物品