javascript - PUT 批量请求正文
问题描述
我想知道这样做的正确方法是什么:
我想更新列表中的一堆项目并将它们一次全部发送到服务器,而不是像 PUT 那样带有 id。这就是我要的:
请求正文:[{ oneKey:'一个值',anotherKey:'另一个值'},{ oneKey:'一个值'}]
我想用 PUT 把它发送到这个服务:mydomain/myservice 而不是像 mydomain/myservice/1 这样的东西
- 响应值的正确形式是什么?
- 如果一切顺利,我应该收到新的更新值吗?
- 如果一切正常,我是否应该收到新的更新值和其他未更新的值?
- 如果出现问题,我应该接收旧值吗?
或者是其他东西?
解决方案
我认为您的问题指出了在 RESTful API 中不遵循 RESTful 风格所造成的摩擦。通常,您会为每个资源发送一个 PUT 请求,并为该特定资源的操作获取适当的响应。但有时候,事实证明并非总是最好的做事方式。所以,我看到这个问题以两种不同的方式解决。
选项 1 对于这些类型的批处理方案,您将有一个单独的 RPC 服务来处理这些请求。这是一个完全独立的过程,通常是一个 SOAP Web 服务,或者如果您想使用更新的方式来执行此操作,您可以查看grcp.io。非常有效,非常适合这种类型的请求。但是,由于您有另一个流程要处理,因此开销更大。
选项 2 使用您当前的 RESTfull API 并在 URI 中使用“_verb”段。这表示执行而不是资源。下划线是知道它不是资源的视觉提示。例如 :POST https://api.mydomain.com/sales/orders/_batchUpload
响应将是在您的场景中有意义的任何内容。我见过的一种方法是响应对象包含一个资源 ID 列表,每个资源 ID 都有一个状态标志。因此,状态是“成功”或“失败”。
推荐阅读
- jquery - 字母头像 - 如何为每组字母添加不同的颜色类别 - A 到 H、J 到 S、T 到 Z?
- vb.net - 我们可以在后面的代码中设置 Telerik rad 时间选择器的最小时间吗
- dart - 如何在 Dart 中获取线程信息?
- javascript - 如何通过单击按钮更改 img 位置
- pylint - 是否有教程如何抑制 Squish 的 Pylint 警告?
- scala - Scala:将整个列表的 Either 与每个元素的 Either 结合起来
- java - JDBC / WebRowSet: readXml(Reader reader) vs. readXml(InputStream iStream)
- xamarin - Xamarin iOS 构建的 DevOps CI 错误在钥匙串中找不到有效的 iOS 代码签名密钥
- css - 带有图像的 flex 子项的大小不正确
- vue.js - 如何在测试 vue 组件时为 jest 快照添加样式?