REST API filtering/search 在父资源上

REST API filtering/search on a parent resource

假设我有一家商店,例如 Amazon,销售各种产品,例如 计算机绘画。它们彼此截然不同,有自己的一套领域和逻辑。

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

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

乙。只获取绘画

C。仅获取计算机

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 的核心功能。

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

/products?type=computers&order_by=date

我一直采用的方法是您的 API 层应该与您的对象建模相匹配。因此,您问题的答案取决于源数据。嗯,对象建模后的源数据。

如果您有计算机和打印机的对象模型,它们应该是您所说的资源。他们有共享 data/functions 吗?如果是这样,您也许也应该有一个对象模型:Product。然后计算机和打印机扩展产品 class.

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