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

8

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

  • 发送GET请求到应用程序,生成文件并将其写入响应中,带有正确的头信息?
  • 发送GET请求到应用程序,生成文件并编写包含文件元数据和指向下载servlet的链接的JSON数据?

我会说第一个。你有什么元数据? - inf3rno
我只有文件名、大小和MIME类型。 - Jib'z
您可以使用 content-typecontent-lengthcontent-disposition 标头。 - inf3rno
2个回答

8
我的使用场景是可能会创建一个非常大的文件,创建过程可能需要一段时间。此外,我不希望我的文件创建过程被中断,因为这肯定是代价高昂的。因此,异步文件生成与信令似乎是一个好的解决方案。
步骤如下: 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。
它使您能够创建非常大的文件并花费很长时间,将文件创建过程重用于多个用户,并将文件生成过程本身转移到工作程序中。

1
我认为第一种方法更好,但这取决于您想要作为元数据返回的内容。实际上,您可以利用“Content-Disposition”标头发送回元数据,例如文件名等。
您还可以注意到,还可以向客户端发送多部分内容。这允许混合文件内容和表单数据。
希望这能帮助您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接