使用多个ID设计RESTful服务

时间:2012-07-03 02:54:41

标签: rest

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

/items/1,2

/items/2,1

以上代表不同的资源,但结果是相同的。 这可能会让API的消费者感到困惑。

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

示例,item获取id 1:

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",
            ... 
        }
    ]
}

因此,items id 12的{​​{1}}可能会出现同样的问题。 我们假设我们在||的语法中将操作建模为query

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

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