【问题标题】:How to update the order of multiple items via REST API?如何通过 REST API 更新多个项目的顺序?
【发布时间】:2015-01-18 06:51:44
【问题描述】:

我正在开发一个用于导航菜单项列表的 REST API,主要用于学习目的。到目前为止,API 中的所有内容都非常简单,因为我只需要通过经典的 /collection/{id} 东西修改单个项目。

但是现在我想更改存储在我的数据库的order 字段中的列表项的顺序,当然我不想为每个菜单做一个请求项目。

那么,什么是合适的方式/常见的这样做的最佳实践?

我可以想象向/collection 发送一个PUT 请求,其中包含已发送数据中的id-order 键值对,但Laravel(我用来构建API)不允许这样做。我当然可以绕过这个限制,但我想有合理的理由不允许这样做。

另一个想法是向/collection/{ids} 发送一个PUT 请求,并使用逗号分隔的ID 列表,但为此我还必须发送ID 的键值列表及其订单值,这看起来很漂亮多余的,因此也有点脏。

那么实际上最好的方法是什么?

【问题讨论】:

  • 使用 PATCH 更新记录中的部分字段并发送一组请求,然后在 laravel 中遍历它们并相应地更新记录
  • PATCH 听起来确实很有用,我似乎已经监督了这种方法。但这仍然不能真正解决我的问题 - 或者你所说的“请求数组”是什么意思?
  • 您使用的是表单还是 AJAX 元素?
  • 我只使用 AJAX。
  • 好的,请发布您的 Ajax 代码,我给您我的意见

标签: rest httprequest


【解决方案1】:

我建议你用资源路径定义一个新路由:/collection/reorder。

这允许使用POST 方法将元素列表及其新位置发送给它。内容看起来像这样:

{
    "element1": 4,
    "element2": 1,
    (...)
}

“element1”是一个元素的标识符和对应的值,它的新顺序。

您会注意到,您需要发送到此方法的数据格式可能取决于您在 UI 中使用的重新排序列表的工具(例如,拖放)。

希望对您有所帮助。 蒂埃里

【讨论】:

  • 这听起来很有用。我不确定是否适合为实际上不是模型或集合的东西定义新路线。谢谢!
  • 我常用资源/collection/的POST方法来添加一个元素到集合中。也许这个链接可以帮助你:templth.wordpress.com/2014/12/15/designing-a-web-api.
猜你喜欢
  • 2014-10-26
  • 1970-01-01
  • 2017-06-13
  • 2015-01-03
  • 2019-02-08
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
相关资源
最近更新 更多