大约一年前,对apollo-server
(或react-apollo
?)进行了更新,这完全打破了GraphQL请求中省略可空输入的旧用法。
在更新之前,您可以定义以下内容:
Mutation {
editProfile(id: ID!, name: String, avatar: String)
}
然后在省略输入的客户端调用它时,说:
editProfile(id: "whateverid", name: "James")
您在解析器中将avatar
作为undefined
。
现在将其设置为null
。
问题是:对于某些可选输入,例如null
,avatar
是一个完全有效的值。因此,基本上,我们在此过程中丢失了信息,不再能够区分服务器端之间的区别:
null
(= 不更新数据库),并且null
(=更新数据库)的可选输入我在Github上为此打开了一个线程:https://github.com/apollographql/apollo-server/issues/2056
一年前,另一个人在react-apollo
的Github上也做过同样的事情:https://github.com/apollographql/react-apollo/issues/1569
dacz发布了an interesting response,对它进行了很好的总结:
在apollo客户端的查询变量中未显示空输入时,将使用空值调用该输入。 客户不应将整个输入传递为null,而应完全忽略它或使用undefined传递它。传递null可能意味着将输入明确为null。同样适用于输入字段,因此服务器可能会对显式重置值(在输入中显示为null或如果省略则不进行处理)做出反应。
两个线程仍未解决。
有人对此有任何清洁的解决方案吗?