“正确”的REST URL可以获取所有资源中的所有资源?

时间:2017-01-30 22:44:50

标签: rest

所以......我知道这个问题可能非常接近基于意见的。我希望不是,并且REST标准清楚我要问的是什么,但如果不是,我会关闭它。

我有一个网站(在Django中,数据存储在Postgres中),Product( - s)和Category( - ies)每个category可以包含多个{{ 1}}( - S)

所以,问题是:什么是“正确”的终点(如果有的话)来获取所有类别中的所有产品?

我相信很清楚获得特定类别的所有产品。例如,如果类别ID为product,为了获得所有产品,我会写:

24

但是所有类别的每个类别如何?

http://myserver.com/api/categories/24/products 吗?

http://myserver.com/api/categories/products吗?

使用某种参数会更好吗,例如http://myserver.com/api/categories/all/products

这个想法会有这样的回应(JSON格式)

http://myserver.com/api/categories?mode=all_products

提前谢谢。

1 个答案:

答案 0 :(得分:2)

就REST而言,如果您在网址中唯一地表示资源,使其为cacheable(并且遵守HATEOAS但让我们跳过该部分),则不会真的很重要你如何构建你的网址。在我看来,由于你想获得所有产品,你的网址应该是

GET /products         # to return all products with their associated categories
GET /category/24/products  # to return all products belonging to a particular category

注意: - 尽管url结构并不是REST的一部分,但是根据实体/资源和标识符设计url确实可以更轻松地创建RESTful API。结构良好的网址也使客户更容易使用它们。