我正在使用JSON作为数据语言构建Web服务API。设计从服务返回的数据结构,我在决定如何处理缺失值时遇到一些麻烦。
考虑这个例子:我的网上商店有一个产品价格未知,可能是因为该产品尚未发布。我是否包含price: null
(如下所示)或我是否只是省略了此项目的price
属性?
{
name: 'OSX 10.6.10',
brand: 'Apple',
price: null
}
我主要关心的是让API尽可能易于使用。显式空值清楚地表明产品上可以预期price
,但另一方面它似乎是浪费的字节。可能有一大堆属性与此特定产品完全无关,而与其他产品相关 - 我是否应该明确地null
显示这些属性?
{
name: 'OSX 10.6.10',
price: 29.95,
color: null,
size: null
}
Web服务设计是否有任何“最佳实践”,支持显式或隐式空值?任何事实上的标准?或者它完全取决于用例?
答案 0 :(得分:3)
FWIW,我个人意见:
我是否包含
price: null
(如下所示)或是否只是省略此商品的价格属性?
我会将“标准”字段的值设置为null
。虽然JSON经常与JavaScript一起使用,但缺少的属性可以像设置为null的那样处理,但对于其他语言(例如Java)则不是这种情况。必须先测试是否存在字段似乎不方便。将值设置为null
但是存在字段会更加一致。
可能有很多属性与这个特定产品完全无关,而与其他产品相关 - 我是否应该明确地
null
显示这些属性?
我只会包含与产品相关的字段(例如,不包括pages
的CD)。客户端的任务是正确处理这些“可选”字段。如果您对某个与产品相关的字段没有任何价值,请将其设置为null
。
如前所述,最重要的是保持一致并明确指出可以预期的字段。您可以使用gzip压缩来减小数据大小。
答案 1 :(得分:0)
我不知道哪个是“最佳做法”。但我通常不会发送我不需要的字段。 当我阅读回复时,我检查是否存在值:
if (res.size) {
// response has size
}