异步返回REST服务的http状态码202

本文关键字:状态 http 返回 REST 服务 异步 | 更新日期: 2023-09-27 18:16:16

我们有一个REST服务,它调用一个可能需要2分钟以上处理的系统进程。由于在客户机上,我不想等待30秒到2分钟来等待服务器的响应,所以我可以向客户机返回一个202来通知它正在处理中,但不一定需要等待流程完成吗?

有安全的方法来处理这个吗?(我确信这里存在线程安全问题,特别是如果服务可能同时受到大量请求的攻击,所以创建大量线程可能不是解决方案。)

我们正在探索的是使用批处理,每5分钟左右检查一次数据库是否需要生成报告(这就是系统进程的作用),但是我对这种可能性很好奇。

Thanks in advance

编辑最终的产品实际上是生成一个PDF报告,然后通过电子邮件发送给用户。我主要是试图避免在消费客户端等待服务响应的大约2分钟。

异步返回REST服务的http状态码202

我认为服务立即返回202是好的,因为它确认成功接收到创建pdf的请求。

你计划在数据库中记录挂起的请求并分批处理它们对我来说是有意义的。如果每个pdf文件都被勾选为"完成",一旦pdf已经发送无误(像消息队列/工作者角色系统),我认为它会工作得很好。

如果您不想走db路由,您的服务端点可以生成另一个异步作业,然后返回202。这样,pdf作业立即启动,并且客户端立即得到响应-但是在我看来,这确实有点混乱。

edit:重新阅读您的问题-我认为您不能返回202并在同一函数中继续处理。一旦返回,就完成了(除非生成了另一个异步作业,如上所述)。

只要使用某种排队机制,就应该没问题。数据库可以工作,或者您可以使用更奇特的解决方案,例如完整的排队系统。我将返回202与Location标头,指向某种状态页,最终包含链接到您的处理结果。