我目前正在开发一个RESTful应用程序,可以向客户端提供生成的二进制文件。我想知道最佳实践是什么: 发送GET请求到应用程序,生成文件并将其写入响应中,带有正确的头信息? 发送GET请求到应用程序,生成文件并编写包含文件元数据和指向下载servlet的链接的JSON数据?
我的使用场景是可能会创建一个非常大的文件,创建过程可能需要一段时间。此外,我不希望我的文件创建过程被中断,因为这肯定是代价高昂的。因此,异步文件生成与信令似乎是一个好的解决方案。步骤如下: 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。它使您能够创建非常大的文件并花费很长时间,将文件创建过程重用于多个用户,并将文件生成过程本身转移到工作程序中。
我认为第一种方法更好,但这取决于您想要作为元数据返回的内容。实际上,您可以利用“Content-Disposition”标头发送回元数据,例如文件名等。您还可以注意到,还可以向客户端发送多部分内容。这允许混合文件内容和表单数据。希望这能帮助您。
content-type
、content-length
和content-disposition
标头。 - inf3rno