GraphQL规范是否允许服务器返回空对象作为字段值?
GraphQL服务器返回空对象作为字段值是否合法?
场景说明
给定如下GraphQL Schema:
type Query { person: Person } type Person { name: String }
执行查询语句:
query { person { name } }
收到如下响应是否符合规范?
{ "data": { "person": {} } }
规范依据与结论
这种响应不符合2021年10月的GraphQL规范,核心依据有两点:
- 值补全(Value Completion)规则:当查询请求了对象类型的子字段时,若父对象无法提供该子字段的有效数据,要么返回子字段的
null值,要么将整个父字段设为null,绝对不能返回空对象来跳过子字段。 - 执行阶段的字段映射要求:规范明确规定,查询中选中的每个字段(比如示例里的
name),都必须在响应对应的对象中生成条目。也就是说,person对象里必须包含"name": null这样的键值对,而不是空对象。
关于歧义的补充
你所说的规范未明确JSON序列化细节的情况确实存在,但从GraphQL的设计初衷来看,响应必须严格匹配查询的字段结构,保证客户端能稳定解析预期的字段。返回空对象会打破这种约定,让客户端无法区分“字段未被返回”和“字段值为null”的场景,这违背了GraphQL的一致性原则。
内容的提问来源于stack exchange,提问作者Logan
相关产品推荐
相关产品推荐

