【问题标题】:Best practice for RESTFull Web services and file downloadRESTFul Web 服务和文件下载的最佳实践
【发布时间】:2016-07-25 16:16:19
【问题描述】:

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

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

【问题讨论】:

  • 我会说第一个。你有什么元数据?
  • 我只有文件名、大小和mime类型
  • 您可以使用content-typecontent-lengthcontent-disposition 标头。

标签: rest


【解决方案1】:

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

步骤:

  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

它使您能够创建非常大的文件并花费很长时间,为多个用户重用文件创建过程,并将文件生成过程本身从应用服务器转移到工作人员。

【讨论】:

    【解决方案2】:

    我会说第一种方法,但这取决于您想要作为元数据返回的内容。事实上,您可以利用 Content-Disposition 标头发送回元数据,如文件名、...

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多