REST API过滤/搜索父资源

时间:2016-11-14 18:43:28

标签: rest api json-api

假设我有一个像亚马逊这样的商店,销售各种产品,如计算机绘画。它们彼此完全不同,并且有自己的字段和逻辑。

除了典型的CRUD之外,我还需要设计一个JSON API,允许我:

一个。获取绘画计算机的未分组列表。例如:[computer, painting, painting, computer, ...]按发布日期排序(因此具有过滤功能)。

B中。仅获取绘画

℃。仅获取计算机

RESTful方法通常类似于:/api/paintingsapi/computers,它非常适用于隔离结果。

但我主要担心的是操作A - 获取按发布日期排序的未经编组的绘画和产品列表。我看待它的方式有三种方法:

1)创建一个名为products的新独立资源,例如/api/products,它具有过滤功能,并继续使用/api/resource进行特定的CRUD操作。

2)创建将用于过滤操作的父products资源。所以我可以执行类似/products?order_by=published_date的操作。对于更具体的资源,我可以执行类似/products/paintings/products/computers

的操作

3)没有绘画计算机的资源。而是有一个通用product。然后,我将在api层中拥有大多数逻辑,并降低客户端的复杂性。

我倾向于方法#3,但希望在实施之前获得反馈,因为这将是API的核心功能。

2 个答案:

答案 0 :(得分:1)

在我看来,如果您搜索它,我会选择方法#3并使用产品类型查询API。

/products?type=computers&order_by=date

答案 1 :(得分:1)

我一直采用的方法是你的API层应该与你的对象建模相匹配。那么,你的问题的答案将取决于源数据。那么,它的对象建模后的源数据。

如果您有计算机和打印机的对象模型,它们应该是您所说的资源。他们共享任何数据/功能吗?如果是这样,你也应该有一个对象模型,也许是:产品。然后计算机和打印机扩展Product类。

考虑到这一点,设计API层来镜像它。由于计算机和打印机都扩展了产品。作为计算机和打印机资源的父级产品是有意义的。