【发布时间】:2020-01-20 12:40:53
【问题描述】:
我创建了一个烧瓶 restplus API,它接受 xlsx 文件作为输入并返回一个 XML。这将由我们不同的 API 在内部使用
当前流程:
- 用户通过调用 /upload 端点发布 xlsx 文件。
- API 接受文件,存储它并返回一个文件 ID。
- 用户通过提供文件 ID 向 /run 发送另一个请求 处理
- API 将请求放入 rabbitMQ 队列并返回 202 location URL 轮询状态。
- celery worker 接收请求并开始处理它。它需要 需要一段时间才能完成。
- 同时用户可以轮询状态
- 一旦完成,API 会发送 303 以及另一个位置 URL 到 下载文件。
- 用户点击新 URL 下载文件。
但是,我们的架构师团队不赞成给客户端提供轮询机制,并要求我们采取另一种方法,可能是回调 URL。 他们对此有发言权——“忙着等待睡眠检查任务是否完成,这不是一个好的编程习惯。”
我想知道在没有轮询状态的情况下,客户是否可以采取任何不同的方法。回调是我知道的,但它还没有到位。
【问题讨论】:
-
“架构师团队。”哈哈。在我看来,他们有责任解释他们关于这是不好的做法的断言并证明额外的工作是合理的;我知道这种情况很少发生,但是如果有经理或其他第三方可以为您仲裁,我会尝试将其重新交给他们。如果他们不喜欢现在的做法,他们应该有责任提出解决方案并让事情顺利进行。
-
另外,请注意:您可能需要考虑重新审视定义端点的方式; REST is pretty specific 关于这通常是如何完成的。我并不是说这是 API 架构的全部、全部,但是如果您将 API 称为 RESTful,人们可能会对此做出合理的假设,而这些假设不会像您所描述的那样成功你的端点。
标签: rest flask flask-restful