替代异步长时间运行任务的其他API替代方法

问题描述 投票:-1回答:1

我创建了一个flask restplus API,该API接受xlsx文件作为输入并返回XML。这将由我们的不同API在内部使用]

当前流量:

  • 用户通过调用/ upload端点来发布xlsx文件。
  • API接受文件,将其存储并返回文件ID。
  • 用户通过提供以下文件的ID,向/ run发送另一个请求:处理
  • API将请求放入RabbitMQ队列,并返回202,位置URL轮询状态。
  • 芹菜工作者拿起请求并开始处理它。它需要需要一段时间才能完成。
  • 同时用户可以轮询状态
  • 完成后,API会发送303,并将另一个位置URL发送给下载文件。
  • 用户点击新网址以下载文件。

但是,我们的架构师团队不赞成为客户提供轮询机制,并要求我们采用其他方法,这可能是回调URL。他们在其中有一个发言权-“忙于睡眠等待检查任务是否完成,这不是一个好的编程习惯。”

我想知道在没有轮询状态的情况下客户可以采取任何其他方法。回调是我所知道的,但它尚未到位。

rest flask flask-restful
1个回答
0
投票

使用回调URL至少有一个潜在的重要要求:必须在静态位置通过共享网络直接访问客户端。如果可以假设所有可能的客户端都满足此要求并且接受来自API的连接,那不一定是问题,但是该信息无疑至关重要,如果在某个时候添加此要求可能会引起严重的麻烦人们想从例如桌面应用程序中使用此API。

由于拒绝工作流程的陈述原因是“良好的编程习惯”,因此您在提出一些无需进一步信息即可被接受的东西方面处于不利地位。如果他们愿意接受回调URL可访问性要求,那肯定是一个选择,但是我要说,您需要仔细考虑并提醒用户有关故障状态。

另一种可能性是一个单独的一体式端点,该端点本身可以​​调用其他端点并进行阻塞或直接执行内部操作而无需中间请求(尽管这可能需要您自己进行轮询,绕过队列或使用您的own内部回调在文件处理完成后完成请求)。

我还将重新审查所提供的任何要求,并确定它们为何以及为何不正确或不足以充分定义可接受的交付物(或者您的端头是否有误解)。这似乎不太可能是一次性的问题,并且如果存在流程修复或诸如内部开发指南之类的内容可能会限制将来的误解或架构分歧,那么值得努力。

© www.soinside.com 2019 - 2024. All rights reserved.