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

Bor*_*jaX 8 rest

所以......我知道这个问题可能危险地接近于基于意见。我希望不是,并且 REST 标准清楚地说明了我要问什么,但如果不是,我将关闭它。

我有一个带有Product(-s) 和Category(-ies)的网站(在 Django 中,数据存储在 Postgres 中)每个都category可以包含多个product(-s)。

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

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

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

但是所有类别以及每个类别中的所有产品如何?

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

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

使用某种参数会更好,例如http://myserver.com/api/categories?mode=all_products

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

{
    "25": [{
        "id": 1,
        "name": "Product 1 in category 25",
        "price": 100
    }, {
        "id": 2,
        "name": "Product 2 in category 25",
        "price": 200
    }],
    "26": [{
        "id": 3,
        "name": "Product 1 in category 26",
        "price": 300
    }, {
        "id": 4,
        "name": "Product 2 in category 26",
        "price": 400
    }]
}
Run Code Online (Sandbox Code Playgroud)

先感谢您。

hsp*_*her 6

就 REST 而言,如果您在 url 中唯一地表示资源cacheable(并且遵守 HATEOAS,但让我们跳过那部分),那么您如何构建 url 并不重要。在我看来,既然你想得到所有的产品,你的网址应该是这样的

GET /products         # to return all products with their associated categories
GET /category/24/products  # to return all products belonging to a particular category
Run Code Online (Sandbox Code Playgroud)

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