作为 REST API 的一部分上传多个文件的最佳方式?单个或多个 POST 请求?

问题描述 投票:0回答:2

我正在尝试为我的 Web 服务创建 REST API。

我想让 API 的用户能够使用我的服务发起新请求。这涉及上传一两个 zip 文件以及一些其他参数。

如何将这一切合并为一个请求?或者以某种方式执行多个请求是否更好?

我对制作 REST API 不太熟悉,所以我不知道人们通常是怎么做的。

如果重要的话,我正在为我的网站使用 PHP。

api rest post http-post
2个回答
3
投票

为此,您需要客户端以 mime/multipart 格式上传。我不懂 PHP,但我确信有一个库可以支持接收/解析您收到的多部分消息。

至于是否是一个好主意..如果发起请求是单个资源的创建,那么接受mime/multipart也不是没有道理的。如果发送的部分本身就是成熟的资源,那么最好让客户端单独发送它们,并在启动请求中引用它们。另请注意,与简单请求相比,mime/multipart 对您的客户来说会更难处理。

这篇帖子似乎与您想要实现的目标相关。


0
投票

长话短说:我以 zip 流的形式发送多个部分,因为我经常需要压缩。

请注意,发送多部分意味着隐藏的障碍,因为必须计算任何有效负载中都没有出现的部分分隔符。 (我不会解释这一点,这是http规范之类的)。我可能会假设客户端堆栈实际上甚至试图避免分隔符与有效负载的冲突。由于概率非常低,许多实现甚至不会打扰。但是,如果他们确实检查冲突,则意味着他们在发送之前缓冲整个部分。

至少有一些 http 客户端堆栈还存在另一个困难,那就是它们不会独立或根本不提供部分压缩;您必须对整个请求进行 gzip 压缩(并使用传输编码),或者通过 http 在上层中对各个部分进行 1 1 压缩。

因此,通过发送 zip 流(用 java 编写 zipoutputstream,不知道其他运行时/语言),您可以有效地将名称映射发送到 blob 值,并进行压缩,并且它非常通用且坚固。您不必缓冲任何内容,也不必处理请求的部分标头。

当 200 个或单个实体还不够时,这也是响应复杂结果的好方法。

因此,文件被压缩,并且我将参数捆绑为第一个 zip 条目,无论其余 api 的格式如何(例如:/request.json 或 xml 或属性等),以便调整服务器有关其余 api 的提示压缩流。

请注意,服务器可能永远不需要缓冲任何内容。您可以流式传输 500MB 的文件,而无需在服务器磁盘上存储单个字节(假设此类文件有目的地或纯粹被消耗,如归约函数)。

希望这对未来访问此问题的访客有所帮助。这只是另一种选择。

© www.soinside.com 2019 - 2024. All rights reserved.