3

我正在设计一个 RESTful 服务。就是列出一组数据。主要问题是该集合没有合理的单一标识符。在系统的知识范围内也不能容易地计算出特定的集合。因此,似乎不可能拥有 GET /items/{identifier} 服务。

我确实有被请求的每个元素的 id。我的主要问题是在 URI 中列出 id 似乎不是 RESTful(例如 GET items/{id1},{id2},...,{idn} )。正确的?

我可以看到 DELETE 有一个类似的用例——在一个请求周期中删除多个项目。

在 REST 领域内如何满足这样的用例?那可能吗?

4

1 回答 1

0

问题中所述的方法实际上意味着对于每个组合ids都有一个资源。假设我们有 2 ids: 1 和 2。

/items/1,2

/items/2,1

以上代表不同的资源,虽然结果是一样的。这可能会让 API 的使用者感到困惑。

另一种对此建模的方法是通过查询参数作为过滤语义。让我们假设,id实际上是资源的一个字段。

例如,itemid1 为单位:

GET
/items/1

Response:

{
    "id": 1,
    "type": "table",
    "color": "black",
    ...
}

所以问题是,如果我需要批量购买几件商品怎么办?您可以将此问题概括为items按某些字段的值进行过滤的一般问题。例如:获取所有items类型

GET
/items?query="name='table'"

Response:
{
    "data": [
        {
            "id": 1,
            "type": "table",
            "color": "black",
            ... 
        },
        {
            "id": 2,
            "type": "table",
            "color": "grey",
            ... 
        },
        {
            "id": 6,
            "type": "table",
            "color": "brown",
            ... 
        }
    ]
}

因此,可以询问相同的问题来获取itemswhere idis12。假设我们将or操作建模||query

GET
/items?query="id=1||id=2"

Response:
{
    "data": [
        {
            "id": 1,
            "type": "table",
            "color": "black",
            ... 
        },
        {
            "id": 2,
            "type": "table",
            "color": "grey",
            ... 
        }
    ]
}
于 2015-04-04T14:00:36.633 回答