【问题标题】:What is a good way to transfer binary data to a HTTP REST API service?将二进制数据传输到 HTTP REST API 服务的好方法是什么?
【发布时间】:2021-04-05 17:27:09
【问题描述】:

我们正在扩展我们的 HTTP REST API 以允许客户端上传图片(出于本问题的目的,假设二进制数据)。到目前为止,我们只允许在 API 参数中使用简单的字符串。允许他们上传二进制数据的好方法是什么?是要求base64编码的形式吗? URL 是否会变得太长而 Web 服务器无法处理?

有什么建议/最佳做法吗?

【问题讨论】:

标签: http rest


【解决方案1】:

只需在 POST 正文中按原样发送二进制数据,但要使用适当的 Content-Type 标头(例如 image/jpeg)——我认为这是最“RESTful”的方式。

(一般而言,根据经验,在设计 REST 服务时,您使用 HTTP 协议原样工作的次数越多,而不是像 base64 那样尝试在其之上覆盖一些不必要和复杂的东西越好。HTTP 是最终的 RESTful 协议,并且 Content-Types 允许在“REpresentational State Transfer”中使用不同的“Representation”)

要记住的另一种可能性是接受图像 URL 而不是实际的物理文件。这使得独立应用程序变得更加困难,例如从用户的驱动器中读取图像,但对于 mashup 类型的应用程序来说更容易,其中图像可能作为 URL 从另一个服务返回。

当然,您可以同时允许这两种选择。

【讨论】:

  • 对于不是 jpeg 图像的自定义二进制数据,我们应该使用什么内容类型?
  • 当人们尝试检索图像时,您是否应该在响应中添加 Content-Length 标头?
  • 我见过的大多数 HTTP 堆栈都会在 HTTP 协议需要时自动设置 Content-Length。 (它不应该总是在那里,例如在流模式下......不记得确切的细节,如果您有兴趣,请查看 HTTP RFC。最好让底层堆栈为您处理它。 )
  • @Pacerier 用于通用二进制数据使用 application/octet-stream
猜你喜欢
  • 2012-04-14
  • 2020-01-05
  • 2018-11-23
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
相关资源
最近更新 更多