用于文件 CSV 导入的 API 设计,最佳实践方法?

Posted

技术标签:

【中文标题】用于文件 CSV 导入的 API 设计,最佳实践方法?【英文标题】:API design for file CSV import, best practice approach? 【发布时间】:2017-03-11 08:56:05 【问题描述】:

我需要设计一个 REST API 来导入包含 30 列的员工 CSV 文件。文件中的记录数可能因业务规模而异,可以是 10 条,也可以是 5000 条。

这是我的设计方法

POST /Employees - 将添加一条员工记录(将有 30 属性) POST /Employees?bulk - 将接受多个 JSON 员工记录。在这种情况下,用户可以添加一条记录,如下所示 传递 json 对象。 发布 /Employees?file - API 将接受 CSV 文件(一定大小),解析和处理将在服务器上完成。

在前两个选项的情况下,用户需要在发送前读取 CSV 并转换为 JSON。

问题

这是最佳实践设计吗? 我应该提供用于读取 CSV 并转换为可接受的 json 格式的 javascript 库吗?什么时候提供 JavaScript 库? 是否有任何此类 API 示例可用于对设计进行建模?

【问题讨论】:

这个问题要么过于宽泛,要么主要基于意见。 我不知道该如何改写。我相信并回答这个问题将对社区有所帮助,因为该场景广泛适用。 我会回答标题中的问题。我认为道格拉斯·亚当斯(Douglas Adams)做到了这一点。 (不,我不是认真的 - 但它一切的答案,对吧?) 【参考方案1】:

由于我对javascript不熟悉,所以我的回答将集中在问题1,关于如何设计一个用于导入大量数据的api。 一般有两种方式,同步和异步。

同步方式

为了避免长时间等待将数据导入数据库,我们应该限制每个请求的数据行数。如果用户导入的数据超出限制,前端需要将数据拆分成多个请求。为了更好的用户体验,我们可以显示当前的导入进度。

异步方式

相对于同步方式,异步实现要复杂一些。 1.我们可以上传csv或者json文件到Amazon S3,然后通过api发送文件地址到服务器。 2.异步worker从s3下载文件后开始将数据导入数据库。为了避免数据库阻塞,我们还得分批导入。 3.为了获取导入进度,导入完成后前端通过api或server轮询通知前端。

两种方式各有利弊,选择哪种方式取决于数据量和实现复杂度之间的权衡。

【讨论】:

以上是关于用于文件 CSV 导入的 API 设计,最佳实践方法?的主要内容,如果未能解决你的问题,请参考以下文章

最佳实践:使用 PHP 5.x 将 CSV 导入 MYSQL 数据库

RESTful API 最佳实践

RESTful API 最佳实践(转)

前后端分离后,RESTful API 最佳实践

java 导出 excel 最佳实践,大文件 excel 避免OOM(内存溢出) 框架-02-API

Pandas CSV 导入中二进制变量的最佳数据类型,以减少内存使用