【问题标题】:Client interpret data returned from Web Api客户端解释从 Web Api 返回的数据
【发布时间】:2015-04-17 08:07:20
【问题描述】:

我目前有一个 web api 服务,它接受一个参数来确定我应该返回 xml 还是 json。

我还有一个服务,它明确不规定数据应该以什么形式返回(以便 Jquery 等客户端可以规定内容返回类型)。

从带宽的角度来看,返回 XML 的成本很高(会从我的云运营商那里花更多的钱),是否可以以任何方式将客户端限制为 JSON?

我已经完成了数据,XML 是 JSON 的 9 倍,成本是 JSON 的 9 倍!!

对于如何最大限度地降低公共 API 的托管成本的任何其他想法不胜感激!?

谢谢

【问题讨论】:

    标签: xml json http asp.net-web-api


    【解决方案1】:

    首先,您可以利用基于标头Accept 的REST 的conneg 功能(内容协商)来指定响应内容的预期格式而不是参数。如果您希望返回 JSON 内容,只需在您的请求中添加:

    Accept: "application/json"
    

    真的很难回答你的问题 ;-)。你能在这个级别提供更多提示吗?

    如果您掌握了 Web API,我们可以考虑这样的事情:

    • 阻止内容协商(conneg)。如果客户端指定它需要 XML 内容,您可以发回 HTTP 状态代码 415(不支持的媒体类型)。
    • 在 XML 的情况下忽略请求的格式。你只支持 JSON 格式...你总是返回这种格式。

    您还可以在服务器端实现优化:

    • 发回前的内容压缩。它可以简单地包括压缩甚至 zip 压缩(但它需要客户端解压缩内容)。 bean / 格式转换器(例如Jackson)通常支持缩小。
    • 服务器端缓存。根据您的应用程序所做的事情,您可以添加一些缓存以不总是请求您的数据存储。

    希望对你有帮助, 蒂埃里

    【讨论】:

    • 一些优点。我可能只是将返回类型强制为 json。它是许多用户的试点,因此它托管在一个 Azure 免费网站上,因此操作 iis 服务器的能力有限.. 谢谢
    【解决方案2】:

    我可以做到以下几点:

     return Content(HttpStatusCode.OK, returnList, Configuration.Formatters.JsonFormatter);
    

    这可行,但如果客户端将内容类型设置为 xml,则会导致解析错误。

    这是一个解决方案,但它是否理想?

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2017-04-02
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多