RESTFull Web服务和文件下载的最佳实践

时间:2015-10-23 15:17:51

标签: rest

我目前正在开发一个可以为客户端生成二进制文件的RESTFull应用程序。我想知道最佳做法是什么:

  • 向应用程序发送GET请求,生成文件并使用正确的标题写入响应?
  • 向应用程序发送GET请求,生成文件并编写包含文件元数据的json数据和指向下载servlet的链接?

2 个答案:

答案 0 :(得分:4)

我的用例是我们可能正在创建一个非常大的文件,创建过程可能需要一段时间。此外,我不希望我的文件创建过程被中断,因为这样做肯定会花费很多。因此,一个好的解决方案似乎是通过信令生成异步文件。

步骤:

  1. 创建一个新文件POST /downloads(端点名称为示例),响应202 Accepted, Location: /downloads/123(下载的唯一ID)。如果我们在用户之间共享文件,则相同的POST可能会返回相同的ID(所有用户都在等待生成相同的文件)
  2. 请求文件GET /downloads/123,文件尚未完成,回复102 Processing(以及可选的进度和/或ETA,如果有的话)
  3. 请求文件GET /downloads/123,文件已完成,回复303 See other, Location: https://cdn/full-path-to-generated.file.pdf
  4. 它使您能够创建非常大的文件并花费很长时间,为多个用户重用文件创建过程,并将文件生成过程本身从应用服务器转移到工作者。

答案 1 :(得分:1)

我会说第一种方法,但这取决于你想要作为元数据返回什么。事实上,您可以利用Content-Disposition标头发回元数据,如filename,...

您还可以注意到,还可以向客户端发送多部分内容。这允许混合文件内容和表单数据。

希望它对你有所帮助。