将二进制数据发布到REST风格的应用程序

问题描述:

我正在使用REST风格的web应用程序(Django + Piston)。 POST请求将使用Json编码的数据发送到Web应用程序。这对我所有的纯文本数据库表都适用,但我也有一个存储文本和二进制文件的表。将文本和二进制数据发布到RESTful应用程序的最佳方式是什么?将二进制数据发布到REST风格的应用程序

您可以对其进行Base64编码并将其作为字符串发送到JSON消息中,也可以将二进制文件作为单独的资源POST或PUT,然后在JSON消息中通过ID或URL引用它。后一种方法是一种在基于XML的协议中非常常见的带外数据通道(例如,使用XMPP的语音聊天)。

你甚至可以很容易地支持混合模式,其中:

  1. 的小图像被作为{"base64":"OGZmNjJmOWNhYzFlODE0NDBjYmYzNjhjYz..."};
  2. 上传大图像作为参考,{"ref":"http://myserver.com/bits/E4304205-29B7-48EE-A359-74250E19EFC4"}

为了避免外部引用的二进制文件需要双重POST,您可以设计一些协议,允许在单次传输中混合使用JSON和二进制文件。但增量收益不太可能充分奖励这种努力水平。

最后,从设计的角度来看,坚持简单的解决方案,直到它成为一个问题。

+0

因此,如果我不想将二进制代码编码为字符串,我需要来自客户端的两个POST请求,正确的。首先使用文本字段和多部分/表单数据将application/json与它所属的数据的ID一起发送。它是否正确? – pinky0x51 2010-10-27 10:18:32

+0

@ pinky0x51:是的。我已经修改了我的回答来解决这个问题。 – 2010-10-27 10:26:22

+0

@ pinky0x51你可以使用multipart post从一开始发送json作为一个部分和二进制文件作为其他 – kqr 2017-11-08 12:47:37