我们有一个带有RESTful /devices和/buttons的API,而一个设备可能有0到1000个按钮。因此,请求GET /devices/{deviceId}/buttons实现分页(使用startIndex和limit)。每个按钮都有一个sortSequence属性,这是一个数字。必须根据此属性对按钮进行排序(与字母名称或其他内容无关,按钮是根据列表中拖放的最终用户的意愿排序的)。
问题是,您如何处理sortSequence的修改?现在我们在PUT /设备/{deviceId}/按钮/{buttonId}有效载荷中有了它:.和新的序列。但其他按钮呢?例如,如果我们有四个序列为1,2,3,4的按钮,用户将最后一个按钮拖放到第一个位置,而不是一个变化,而是发生几个变化: 4->1,1->2,2->3,3->4。
是谁负责随后的更改,客户机还是服务器?
如果客户,超过:
如果服务器,则超过:
当然,不管是谁做的,如果一个按钮几乎是同时从两个客户端创建的,那么这个序列本身就会变得模糊。
这两种方法似乎都很糟糕,也存在问题。那么,是否有一个普遍接受的最佳实践,如何处理这些修改?
基础设施:.net核心服务器、signalR、web/iOS/Android客户端、ms
发布于 2020-11-23 03:09:19
这是我的诊所。
我使用一个相对的更改值来改变序列。
在HTTP请求中:
PATCH /buttons/:buttonId/sequence?deviceId=:deviceId
{ "$change": n }
n
允许为任何整数或+/-'INFINITY'
。
请注意,查询部分将是您订购的范围。
然后,在服务器中,我在以下情况下更改了这个字段:
n
是一个数字,按+/-1顺序更新所有n
项的序列,并更新:buttonId
项+/-n。正负是基于方向的。n
为+/-'INFINITY'
,则意味着要将其置于顶部或尾部。然后得到范围内的最大/分钟序列,加/减1将是您将要设置的值。这些情况中的任何一种都不会超过2个SQL查询(不包括SELECT
)。
在我的JS代码中可以找到作为引用的大多数逻辑:神话中的ModelService.js /表现者。
https://stackoverflow.com/questions/58763215
复制相似问题