首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RESTful API设置排序序列

RESTful API设置排序序列
EN

Stack Overflow用户
提问于 2019-11-08 08:49:37
回答 1查看 230关注 0票数 2

我们有一个带有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。

是谁负责随后的更改,客户机还是服务器?

如果客户,超过:

  • 通过一次拖放,客户端必须发送数百个REST调用,以修改
  • 因为有分页,客户端不能在不查询所有按钮的情况下创建一个新按钮,因为它需要知道最高的顺序。

如果服务器,则超过:

  • PUT到一个资源(按钮)更新了一堆其他按钮,我认为这违反了REST原则。此外,它还会为每个按钮触发一系列web套接字更新事件,从而减缓UI的速度。
  • 如果create/modify/delete按钮请求快速出现,中间的序列被修改,服务器将遇到并发异常,此时多个并行请求线程将尝试将相同的对象更新为不同的值。

当然,不管是谁做的,如果一个按钮几乎是同时从两个客户端创建的,那么这个序列本身就会变得模糊。

这两种方法似乎都很糟糕,也存在问题。那么,是否有一个普遍接受的最佳实践,如何处理这些修改?

基础设施:.net核心服务器、signalR、web/iOS/Android客户端、ms

EN

回答 1

Stack Overflow用户

发布于 2020-11-23 03:09:19

这是我的诊所。

我使用一个相对的更改值来改变序列。

在HTTP请求中:

代码语言:javascript
运行
复制
PATCH /buttons/:buttonId/sequence?deviceId=:deviceId

{ "$change": n }

n允许为任何整数或+/-'INFINITY'

请注意,查询部分将是您订购的范围。

然后,在服务器中,我在以下情况下更改了这个字段:

  • 如果n是一个数字,按+/-1顺序更新所有n项的序列,并更新:buttonId项+/-n。正负是基于方向的。
  • 如果n为+/-'INFINITY',则意味着要将其置于顶部或尾部。然后得到范围内的最大/分钟序列,加/减1将是您将要设置的值。

这些情况中的任何一种都不会超过2个SQL查询(不包括SELECT)。

在我的JS代码中可以找到作为引用的大多数逻辑:神话中的ModelService.js /表现者

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58763215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档