如何通过 REST API 更新多个项目的顺序?

How to update the order of multiple items via REST API?

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

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

那么什么是合适的/常见的最佳实践?

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

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

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

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

这允许使用 POST 方法发送带有新位置的元素列表。内容看起来像这样:

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

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

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

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