【问题标题】:REST API Put large dataREST API 放大数据
【发布时间】:2013-08-29 01:45:47
【问题描述】:

我在 microsoft Web API 中实现了一个 REST API。
在我的客户端中,我使用 HttpRequestMessage 和 HttpResponseMessage。
当我发送一个小类时,我将其序列化为 JSON,然后发送。
很快,我的班级变大了,我需要将班级 JSON 化,压缩(在内存中)并发送到服务器。我不能再使用相同的技术,我需要分块发送 zip。

实现它的正确方法是什么?我已经阅读了这篇文章Posting a File and Associated Data to a RESTful WebService preferably as JSON

需要一些好文章,我不知道从哪里开始。

【问题讨论】:

  • 它是什么样的数据,它可能会变成多大?您是否可以控制 REST API,以便您可以修改序列化,因为 JSON 不能很好地适应大数据负载?
  • json 适用于投标数据达林。唯一的问题是您需要使用类似于在大型 xml 上使用 sax 解析器的解析器对其进行流式解析。
  • 这取决于你所说的大是什么意思。如果要发送巨大的二进制文件,JSON 可能是我最后选择的序列化机制。
  • 我发送的一个文件是压缩的 DB 文件 (SQL DB),我将其限制为 1GB。另一个文件(我写了这个问题)是一个包含许多类的类,我猜这个文件的最大值可以达到 10MB,压缩在内存中。
  • 但是你知道如果你压缩它就不再是 JSON 了吗?

标签: c# .net rest asp.net-web-api


【解决方案1】:

在客户端这应该可以开箱即用......

        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 的请求将在发送前缓冲客户端。不幸的是,底层的 HttpWebRequest 直到 .net 4.5 才支持缓冲流

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    相关资源
    最近更新 更多