当前位置:  开发笔记 > 前端 > 正文

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

如何解决《通过REST(RESTful)API进行批量收集操作》经验,为你挑选了2个好方法。

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

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

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

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

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



1> Jamie Flourn..:

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

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

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

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


这需要作为答案进行检查!
好答案.如果要将操作应用于大量资源并使用过滤条件选择它们,则可以将具有过滤条件的对象传递给更改任务.
虽然合理避免"聊天"删除,但它会回归到RPC心态......也许可以获取集合,删除所有想要删除的东西,然后PUT集合(使用409响应状态来检测竞争条件)与并发修饰符).如果GET被分页,这种可行性会降低,在这种情况下,PATCH可能是正确的选择.

2> Julian Resch..:

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

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

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有