GraphQL部分更新中:可空字段与可选字段如何区分?
GraphQL 部分更新(Partial Update)的字段歧义问题及解决办法
在GraphQL里,部分字段属于可选(optional)字段——这意味着服务器不能为这类字段返回null;如果是输入(input)里的可选字段,用户可以给它赋值null,或者在变更(mutation)里完全省略这个字段。
但做partialUpdate(部分更新)的时候,问题就来了。后端技术上能区分「未传入的字段」和「被赋值为null的字段」,但schema(模式)本身会误导开发者对字段属性的理解。
示例代码如下:
type Address { street: String! streetNumber: Int! apartmentNumber: Int # 可选字段,毕竟不是所有人都住公寓 city: String! postalCode: String! country: String! } input AddressFullInput { street: String! streetNumber: Int! apartmentNumber: Int city: String! postalCode: String! country: String! } input AddressPartialInput { # 用于部分更新,所有字段都设为可选 street: String streetNumber: Int apartmentNumber: Int # 这个字段既是可选,又支持赋值为null city: String postalCode: String country: String }
在AddressPartialInput里,用户可能以为所有字段都能赋值null,但实际上不行。只有apartmentNumber字段允许赋值null,剩下的字段只能省略,不能赋值为null。
目前来看,唯一可行的解决方式是明确告知客户端:请参照Address类型的定义,来确定AddressPartialInput里哪些字段真正支持null值。
内容的提问来源于stack exchange,提问作者Qback
相关产品推荐
相关产品推荐

