服务器ibmc批量收集信息,http - 通过REST(RESTful)API进行批量收集操作

http - 通过REST(RESTful)API进行批量收集操作

我想要一些关于设计REST API的建议,它允许客户有效地向集合中添加/删除大量对象。

通过API,客户端需要能够向集合中添加项目并从中删除项目,以及操作现有项目。 在许多情况下,客户端希望对集合进行批量更新,例如 添加1000个项目并删除500个不同的项目。 感觉客户端应该能够在与服务器的单个事务中执行此操作,而不是需要1000个单独的POST请求和500个DELETE。

有没有人有关于实现这一目标的最佳做法或惯例的任何信息?

我当前的想法是,应该能够将表示对集合URI的更改的对象PUT,但这似乎与HTTP 1.1 RFC不一致,这似乎表明在PUT请求中发送的数据应该独立于 数据已经存在于URI中。 这意味着客户端必须一次性发送集合的新状态的完整描述,这可能远远大于更改,或者甚至超过客户端在发出请求时所知道的。

显然,如果有必要,我很乐意偏离RFC,但如果存在这样的约定,我宁愿以传统方式这样做。

6个解决方案

61 votes

您可能希望将更改任务视为资源本身。 所以你真的要投入一个对象,这是一个批量数据更新对象。 也许它有一个名称,所有者,以及需要解析和执行的大量CSV,XML等。 对于CSV,您可能还想确定CSV数据中表示的对象类型。

列出作业,添加作业,查看作业状态,更新作业(可能是为了启动/停止它),删除作业(如果正在运行则停止作业)等。这些操作可以轻松映射到REST API设计。

完成此操作后,您可以轻松添加批量数据更新程序可以处理的不同数据类型,甚至可以在同一任务中混合使用。 换句话说,对于您要导入的每种类型的东西,不需要在您的应用程序中复制相同的API。

这也很容易适用于后台任务实现。 在这种情况下,您可能希望向各个任务对象添加字段,以允许API客户端指定他们希望如何通知他们(他们希望您在完成时获取的URL,或向他们发送电子邮件等)。

Jamie Flournoy answered 2019-06-13T20:48:33Z

8 votes

是的,PUT创建/覆盖,但不会部分更新。

如果需要部分更新语义,请使用PATCH。 见[http://greenbytes.de/tech/webdav/draft-dusseault-http-patch-14.html。]

Julian Reschke answered 2019-06-13T20:49:04Z

2 votes

你应该使用AtomPub。 它专门用于通过HTTP管理集合。 甚至可能有您选择的语言的实现。

dowski answered 2019-06-13T20:49:27Z

2 votes

对于POST,至少,您似乎应该能够POST到列表URL并让请求的主体包含新资源列表而不是单个新资源。

Hank Gay answered 2019-06-13T20:49:52Z

1 votes

据我所知,REST表示REpresentational State Transfer,因此您应该将状态从客户端转移到服务器。

如果这意味着来回传递太多数据,您可能需要更改您的表示。 一个collectionChange结构可以工作,有一系列删除(通过id)和添加(带有嵌入的完整xml表示),POST到处理接口URL。 接口实现可以选择自己的删除方法和服务器端添加方法。

最纯粹的版本可能是按URL定义项目,集合包含一系列URL。 新的集合可以在客户端进行更改后进行PUT,然后是要添加的项目的一系列PUT,如果您想要从服务器中实际删除项目而不是仅从该列表中删除它们,则可能会进行一系列删除。

Phil H answered 2019-06-13T20:50:32Z

0 votes

您可以引入现有集合元素的元表示,这些元素不需要传输整个状态,因此在某些抽象代码中,您的更新可能如下所示:

{existing elements 1-100}

{new element foo with values "bar", "baz"}

{existing element 105}

{new element foobar with values "bar", "foo"}

{existing elements 110-200}

添加(和修改)元素是通过定义它们的值来完成的,删除元素是通过不提及新集合来完成的,并且通过指定新订单(如果订单完全存储)来完成重新排序元素。

这样,您可以轻松地表示整个新集合,而无需重新传输整个内容。 使用If-Unmodified-Since标头确保您对内容的想法确实与服务器的想法相匹配(这样您就不会意外删除您在提交请求时根本不知道的元素)。

Joachim Sauer answered 2019-06-13T20:51:10Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值