我有一个标准的REST API项目列表,每个项目的URI都可以访问
GET /items/1
{"item":{
"some":"data",
"selected":false
}}
现在我想添加一个约束,只能选择列表中的一个项目。换句话说,如果选择了一个项目,则所选其他项目在所选字段中应为false。基本上它应该像一个单选按钮组。
我看到了如何实现它的三个选项,所有这些选项都不好
我有没有看到更好的解决方案?
答案 0 :(得分:1)
这些项目在逻辑上是独立的实体,我想访问它们 分开。
虽然对于个别项目可能也是如此,但对于他们的选择却无法真正说出来。 正如您所描述的那样,选择实际上并不是单个资源的状态。这是整组物品的属性。
因此,我会通过向表示项目集合的资源发出POST请求来管理选择
POST /items?selection=<item_id>
我也不允许通过单个selected
资源的任何请求修改item
属性。
从项目的表示中删除selected
属性并将选择作为单独的资源也许是一个好主意。
GET /items/1
- 阅读第一项
GET /items/selected
- 阅读当前选定的
或者可能将选择作为整体items
资源的属性。
{
"items" : [
{"id" : 1, "some" : "data"},
{"id" : 2, "some" : "data"}
],
"selected" : 2
}
或两者,无论哪种方式,我都不会在集合中的项目表示中保留与集合相关的数据。