【问题标题】:API design for file CSV import, best practice approach?用于文件 CSV 导入的 API 设计,最佳实践方法?
【发布时间】: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)做到了这一点。 (不,我不是认真的 - 但它一切的答案,对吧?)

标签: javascript api-design


【解决方案1】:

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

同步方式

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

异步方式

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

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

【讨论】:

    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多