省略的可选输入设置为null而不是未定义

时间:2019-03-24 21:08:51

标签: javascript graphql apollo react-apollo apollo-server

大约一年前,对apollo-server(或react-apollo?)进行了更新,这完全打破了GraphQL请求中省略可空输入的旧用法。

在更新之前,您可以定义以下内容:

Mutation {
  editProfile(id: ID!, name: String, avatar: String)
}

然后在省略输入的客户端调用它时,说:

editProfile(id: "whateverid", name: "James")

您在解析器中将avatar作为undefined现在将其设置为null

问题是:对于某些可选输入,例如nullavatar是一个完全有效的值。因此,基本上,我们在此过程中丢失了信息,不再能够区分服务器端之间的区别:

  • 一个可选输入,该输入被忽略并显示为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或如果省略则不进行处理)做出反应。

两个线程仍未解决。

有人对此有任何清洁的解决方案吗?

0 个答案:

没有答案