eda*_*lls 1 python rest flask restful-architecture flask-restful
我正在使用flask-restful开发RESTful Web服务.
客户端需要能够请求服务器执行的作业.这项工作可能需要约1秒至约1小时才能完成.一般来说,预计需要1-5分钟.
作业完成后,客户端需要下载JSON转储.从100KB到100MB的任何地方.
我看到两个选项:
REST原则下哪个选项更受欢迎?
我在选项1中看到的问题是在等待响应时网络中断的可能性.
小智 5
等待超过几秒钟绝对禁止.
大多数Web基础结构不是为处理如此长的延迟而设计的,并且某些代理/负载平衡器可能会超时 - 即使您的服务器最终产生响应,也没有人会在那里读取它.此外,用户将感到无聊并开始刷新/取消/无论如何.
正如@jonrsharpe在评论中提到的那样,您的服务器应该尽快回复有关正在发生的事情的信息.输入202 Accepted状态代码:
该请求已被接受处理,但处理尚未完成.该请求最终可能会或可能不会被执行,因为在实际处理时可能不允许该请求.没有用于从诸如此类的异步操作重新发送状态代码的工具.
(取自restapitutorial)
因此,回答202和处理结果应该在哪里 - 在正文或响应标题中.然后,客户端可以轮询给定位置以查看作业状态并下载结果.
如果结果很大,则允许HEAD对结果发出请求也是合理的,这样用户可以轮询HEAD以检查结果是否可用,然后下载它们GET,而不会在轮询期间突然泛滥.