我正在设计一个RESTful服务。它是列出一组数据。主要问题是该集合没有合理的单一标识符。特定集合也不能在系统知识内容易地计算。因此,似乎不可能有GET / items / {identifier}服务。
我确实要求每个元素的id。我的主要问题是在URI中列出ID似乎没有RESTful(例如GET items / {id1},{id2},...,{idn})。正确?
我可以看到DELETE有一个类似的用例 - 在一个请求周期中删除多个项目。
在REST领域内如何满足这样的用例?这可能吗?
答案 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
1
或2
的{{1}}可能会出现同样的问题。
我们假设我们在||
的语法中将或操作建模为query
GET
/items?query="id=1||id=2"
Response:
{
"data": [
{
"id": 1,
"type": "table",
"color": "black",
...
},
{
"id": 2,
"type": "table",
"color": "grey",
...
}
]
}