假设我有一个像亚马逊这样的商店,销售各种产品,如计算机和绘画。它们彼此完全不同,并且有自己的字段和逻辑。
除了典型的CRUD之外,我还需要设计一个JSON API,允许我:
一个。获取绘画和计算机的未分组列表。例如:[computer, painting, painting, computer, ...]
按发布日期排序(因此具有过滤功能)。
B中。仅获取绘画
℃。仅获取计算机
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的核心功能。
答案 0 :(得分:1)
在我看来,如果您搜索它,我会选择方法#3并使用产品类型查询API。
/products?type=computers&order_by=date
答案 1 :(得分:1)
我一直采用的方法是你的API层应该与你的对象建模相匹配。那么,你的问题的答案将取决于源数据。那么,它的对象建模后的源数据。
如果您有计算机和打印机的对象模型,它们应该是您所说的资源。他们共享任何数据/功能吗?如果是这样,你也应该有一个对象模型,也许是:产品。然后计算机和打印机扩展Product类。
考虑到这一点,设计API层来镜像它。由于计算机和打印机都扩展了产品。作为计算机和打印机资源的父级产品是有意义的。