来自REST API的JSON响应中是否应包含空值?

时间:2013-03-28 16:20:09

标签: json api rest

我正在设计和开发RESTful API。我采用了一种实用的,面向资源的API方法(面向资源,统一的接口,可寻址性,但没有真正的HATEOAS)。但我不确定的一点是如何在对象中接近空值。

我应该在API响应中包含空值的字段吗?

示例:

{
    "fieldA": "AAA",
    "fieldB": null
}

或者,如果系统没有这些字段的数据,我是否应该完全忽略这些字段?

示例:

{
    "fieldA": "AAA"
}

2 个答案:

答案 0 :(得分:21)

最近在API-Craft上就此进行了讨论。普遍的共识是,值的省略与包含空值之间可能存在语义差异。

如果没有为您的特定用例获取语义值,那么我会说看看API的目标消费者,并考虑是否省略该值会导致问题。

答案 1 :(得分:6)

没有明显的赢家。而且由于没有,客户永远不应该在技术上依赖任何关于此的约定,客户不应该期待任何形式。

  • 删除空值以减少带宽使用通常是不合理的(除非空字段的数量很大且带宽明显受损)。
  • 删除空值以使人类读者更容易看到实际值通常不合理,API不是人机界面
  • 保留空值以使人类读者更容易看到文档结构通常不合理,API不是人机界面,API响应不是API文档
  • 保持空值以允许脏客户端以特定方式解析json 通常是不合理的,客户端应该像干扰读者一样干净利落地写
  • 仅在相应的创建方法(POST / PUT)要求显式传递null 的情况下保留空值才有意义,但通常很难实现
  • 保持输出与创建期间的请求相同可能在每个文档都有自己的拥有客户端时有意义,但通常很难实现
  • 需要考虑的一个特殊情况是由?fields=foo,bar引发的部分响应,其中所有其他字段的返回空值似乎有点违反直觉