REST - GET-Respone临时上传的文件

时间:2016-10-26 13:47:40

标签: rest

我知道标题不正确,但我不知道如何命名这个问题......

目前我正在尝试为转换服务设计我的第一个REST-API。因此,用户有一个输入文件,该文件被提供给服务器并返回转换后的文件。

我目前遇到的问题是,应该使用简单的GET / conversionservice / my / url访问转换后的文件。但是,无法在GET-Request中上传输入文件。 POST是必要的(我是对的吗?),但POST不可缓存。

现在我的问题是,设计这个的正确方法是什么?我知道可以先将输入文件上传到服务器,然后使用我的GET-Request访问它,但这些输入文件可能就是一切!

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

文件上传实际上需要POST请求。它不可缓存的事实不应该打扰服务,因为任何中介(浏览器,服务器,代理等)如何知道文件的内容。如果你需要可达性,你可能必须自己实现它,可能是上传文件的哈希(md5,sha1等)。这将使您不必执行两次实际转换,但是您必须对每个上传的文件进行哈希处理,这会降低您的“缓存未命中率”。

我能想到解决问题的唯一方法是要求用户将可访问的URL传递给查询字符串中的文件,然后您可以处理GET请求,但是您的用户必须进行文件可通过互联网访问。这将允许缓存但限制可用性。

如果您接受文件上传的POST和网址的GET,可能会采用混合方法,这会增加服务的复杂性,但会最大限度地提高可用性。

此外,您应该查看您有兴趣利用哪些缓存,因为他们中的很多都对缓存条目的大小有限制,这意味着如果文件足够大,则无论如何都不会缓存。

最后,我建议你坚持已经建立的标准。接受文件上传的POST请求,如果您对加快用户体验感兴趣可能会使上传保持不变,这将允许用户上传文件一次并以多种不同的格式下载。

答案 1 :(得分:1)

您的事件序列如下:

  1. 使用POST上传文件/文件。要立即响应,您可以使用自己的标头返回所需信息。 (它应返回文档密钥以访问该文件以备将来使用。)
  2. 然后,您可以使用GET进行进一步操作,使用上述文档密钥作为查询字符串。