假设API已有详细记录,并且描述了每个可能的响应字段。
Web应用程序的服务器API是否应在JSON响应中排除空字段以降低流量?这根本不是一个好主意吗?
我试图计算像Twitter这样的大型应用程序的流量减少量,这些数字实际上非常有说服力。
例如:如果从每个API响应中排除单个响应字段"someGenericProperty":null
(26个字节),而据报道Twitter每天有130亿个API请求,则流量减少量将为> 300 Gb。
每天减少超过300 Gb的流量是相当省钱的,不是吗?这可能是有史以来最天真,最简单的计算,但仍然如此。
答案 0 :(得分:29)
一般来说,没有。 API越公开,API的潜在消费者越多,API就越不变。
在许多应用中,网络延迟是主要因素,而不是带宽。出于性能原因,许多API开发人员会赞成针对许多小型请求/响应的一些大型请求/响应。在我上一家公司,销售和计费系统会定期交换100 KB,200 KB或更多的消息。有时只需要几KB的数据。但总体系统性能优于获取一些数据,发现需要更多数据然后发送额外的数据请求。
对于大多数应用程序而言,一些不一致性比多余数据浪费更危险。
与往常一样,有一百万例外。我曾经在鱼雷维修厂接受采访。他们在射程上有水下传感器来跟踪鱼雷。所有传感器数据都通过声学调制解调器传递到中央水下数据采集器。声学水下调制解调器?是。每波特300波特,每个字节都很重要。
有电池供电的嵌入式应用,每个字节都很重要,以及低频RF通信系统。
另一个例外是稀疏数据。例如,设想一个包含4,000,000行和10,000列的矩阵,其中99.99%的矩阵值为零。矩阵应使用不包含零的稀疏数据结构表示。
答案 1 :(得分:1)
它绝对取决于服务及其提供的数据量;它应该评估null / not null数据的比率,并设置一个超过它的值的阈值来排除这些元素。 感谢分享,对我来说这是一个有趣的观点。
答案 2 :(得分:0)
问题是错误的 - JSON不是压缩或减少流量的最佳格式,但像谷歌protobuffers或bson这样的东西。
我正在仔细重新评估API方案中的nullables。我们使用swagger(Open API)和json scheme实际上没有像nullable类型那样的东西,我认为这是有充分理由的。
如果你有一个JSON响应来映射一个突然为NULL的DB整数字段(或者可以根据DB方案),那么它对于关系数据库来说确实没问题,但对你的API来说并不健康。
我建议采用并采用更优雅的方法,对于回复也是to make better use of "required"
。
如果该字段在响应API方案中是可选的,并且在DB中具有空值,则不返回此字段。
我们还对API响应启用了严格的方案检查,这使我们能够更好地控制数据,并迫使我们不要依赖API中的状态。
对于API客户端,当然意味着执行以下检查:
if ("key" in response) {
console.log("Optional key value:" + response[key]);
} else {
console.log("Optional key not found");
}