当请求的子对象不存在时,GraphQL服务端应返回何种正确响应?
当子对象不存在时,GraphQL服务端的正确返回内容
示例Schema
type Person { name: String! address: Address } type Address { street: String city: String }
查询语句
query Person(name: "Otto") { name address { street city } }
场景说明
服务端存在名为Otto的Person对象,但该对象未配置Address(这是正常状态,不是错误)。
正确响应:方案1
{ "data": { "person": { "name": "Otto", "address": null, "__typename": "Person" } } }
原因解释
- 从Schema定义来看,
Person的address字段是Address类型(没有!非空约束),这意味着该字段可以不存在值,此时返回null是准确的,能直接表达「这个Person没有关联的Address对象」的语义。 - 方案2返回一个所有字段为
null的Address对象,语义变成了「这个Person存在Address对象,但该对象的street和city字段未设置」,和实际场景完全不符,会误导客户端对数据状态的判断。
内容的提问来源于stack exchange,提问作者Otto Paulsen
相关产品推荐
相关产品推荐

