REST API filtering/search 在父资源上
REST API filtering/search on a parent resource
假设我有一家商店,例如 Amazon,销售各种产品,例如 计算机 和 绘画。它们彼此截然不同,有自己的一套领域和逻辑。
除了典型的 CRUD 之外,我还需要设计一个 JSON API 让我可以:
一个。获取 绘画 和 计算机 的未分组列表。例如:[computer, painting, painting, computer, ...]
按发布日期排序(因此具有过滤功能)。
乙。只获取绘画
C。仅获取计算机
RESTful 方法通常类似于:/api/paintings
和 api/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。产品作为计算机和打印机资源的父级是有意义的。
假设我有一家商店,例如 Amazon,销售各种产品,例如 计算机 和 绘画。它们彼此截然不同,有自己的一套领域和逻辑。
除了典型的 CRUD 之外,我还需要设计一个 JSON API 让我可以:
一个。获取 绘画 和 计算机 的未分组列表。例如:[computer, painting, painting, computer, ...]
按发布日期排序(因此具有过滤功能)。
乙。只获取绘画
C。仅获取计算机
RESTful 方法通常类似于:/api/paintings
和 api/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。产品作为计算机和打印机资源的父级是有意义的。