【发布时间】:2018-04-04 11:58:52
【问题描述】:
我的情况类似于购物车。我有一组具有已知 ID 的产品,然后我想创建一个修改价格的子集,然后再修改这个子集
超集
[{
"productId":1,
"price":1.99
},
{
"productId":2,
"price":2.99
},
{
"productId":3,
"price":3.99
},
{
"productId":4,
"price":4.99
}]
...
修改子集
[{
"productId":1,
"price":1.59
},
{
"productId":3,
"price":2.59
}]
那我想再次修改子集的样子
[{
"productId":1,
"price":1.79
},
{
"productId":2,
"price":3.59
}]
我能想到的只是客户端发送一个类似
的 POST 请求{
"productsAdded":[
{
"productId":2,
"price":3.59
}
],
"productsModified":[
{
"productId":1,
"price":1.79
}
],
"productsDeleted":[
{
"productId":3,
"price":2.59
}
]
}
限制是我想避免多次调用正确的动词而不发送整个子集。由于实际对象有更多字段,并且子集中有数千个对象。然后更新保存状态触发一个长时间运行的触发并忘记任务。
我看到的问题是客户端可能必须创建一个 状态和服务器必须从消息中重建状态。
这可能不是一个坏方法,但我想知道是否有替代解决方案
【问题讨论】:
-
您的超集和子集缺乏一致性。
-
@AlanLarimer 这是设计使然,我希望子集中的产品具有与原始产品不同的价格,并且能够修改它们以及我在子集中可能拥有的任何其他字段。我想在这里调用集合集可能不太正确
-
我把它读作 Superset -> Subset -> ModifiedSubset,但你实际上是在说明 Superset -> ModifiedSubset -> AgainModifiedSubset?
-
是的,这就是我的意思。子集实体只需要具有来自超集的 id(不必担心创建 ID)并且可以多次修改而不会影响超集。将其视为用户可以创建、更新、删除的产品价格的覆盖,并且所做的所有更改都需要在单个事务中发生
标签: rest api api-design