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

时间:2016-10-28 12:50:48

标签: javascript api-design

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

这是我的设计方法

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

如果是前两个选项,则需要用户在发送前读取CSV并转换为JSON。

问题

  • 这是最佳实践设计吗?
  • 我应该提供javascript库来读取CSV并转换为可接受的json格式吗?什么时候提供JavaScript库?
    • 我可以使用这些API的任何示例来设计模型吗?

1 个答案:

答案 0 :(得分:0)

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

同步方式

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

异步方式

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

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