我目前正在开发一个可以为客户端生成二进制文件的RESTFull应用程序。我想知道最佳做法是什么:
答案 0 :(得分:4)
我的用例是我们可能正在创建一个非常大的文件,创建过程可能需要一段时间。此外,我不希望我的文件创建过程被中断,因为这样做肯定会花费很多。因此,一个好的解决方案似乎是通过信令生成异步文件。
步骤:
POST /downloads
(端点名称为示例),响应202 Accepted, Location: /downloads/123
(下载的唯一ID)。如果我们在用户之间共享文件,则相同的POST可能会返回相同的ID(所有用户都在等待生成相同的文件)GET /downloads/123
,文件尚未完成,回复102 Processing
(以及可选的进度和/或ETA,如果有的话)GET /downloads/123
,文件已完成,回复303 See other, Location: https://cdn/full-path-to-generated.file.pdf
它使您能够创建非常大的文件并花费很长时间,为多个用户重用文件创建过程,并将文件生成过程本身从应用服务器转移到工作者。
答案 1 :(得分:1)
我会说第一种方法,但这取决于你想要作为元数据返回什么。事实上,您可以利用Content-Disposition
标头发回元数据,如filename,...
您还可以注意到,还可以向客户端发送多部分内容。这允许混合文件内容和表单数据。
希望它对你有所帮助。