REST API Put large data
我在Microsoft Web API中实现了一个REST API。在我的客户机中,我使用httpRequestMessage和httpResponseMessage。当我发送一个小类时,我将它序列化到JSON,然后发送它。很快,我的类变大了,我需要对类进行JSON,压缩它(在内存中)并发送到服务器。我不能再使用同样的技术,我需要分块发送压缩包。
正确的方法是什么?我读过这篇文章,将一个文件和相关数据发布到一个RESTfulWebservice,最好是JSON。
需要一些好文章,我不知道从哪里开始。
- 它是什么样的数据,可能会变得多大?您是否拥有对RESTAPI的控制权,以便修改序列化,因为JSON不能很好地适应大数据有效负载?
- 对于投标数据,JSON工作得很好。唯一的问题是,您需要使用类似于在大型XML上如何使用SAX解析器的解析器对其进行流式分析。
- 这取决于你所说的"大"是什么意思。如果要发送巨大的二进制文件,JSON可能是我选择的最后一种序列化机制。
- 我发送的一个文件是压缩数据库文件(SQLDB),我将把它限制在1GB。另一个文件(我写过一个问题)是包含许多类的类,我猜最大值可能达到10MB,压缩在内存中。
- 好吧,1GB确实相当大。我的另一个问题呢?您可以修改服务器,使其不使用JSON,但可以接受其他一些格式吗?
- 现在我可以跳过1GB文件。抱歉,对于骚扰,我唯一的问题是取一个大类(可以是10MB),将它序列化到JSON,压缩JSON,并发送块(multipart?),是否有实现这一点的指南,将zip分块发送到服务器,我控制一切(客户机/服务器)
- 但是你意识到如果你压缩它就不再是JSON了吗?
- +1对于这一事实,是否可以分块发送JSON?在压缩和发送块(压缩)之前,将类对象序列化到JSON有什么好处吗?有其他选择吗?在服务器端,我猜它将解压文件,并反序列化为JSON。
在客户机方面,这应该是开箱即用的…
1 2 3 4 5 6 7
| var httpClient = new HttpClient ();
httpClient .DefaultRequestHeaders.TransferEncodingChunked = true;
var content = new CompressedContent (new StreamContent (new FileStream ("c:\\big-json-file.json",FileMode .Open)), "UTF8");
var response = httpClient .PostAsync("http://example.org/", content ).Result; |
您可以在webapicontrib中找到compressedContent的实现。如果您使用的是.NET 4.5之前的版本,那么在发送之前,请求将在客户端得到缓冲。不幸的是,在.NET 4.5之前,基础httpwebrequest不支持缓冲流