如何确定用于GraphQL突变的根值

时间:2016-04-21 20:55:49

标签: graphql

我正在尝试使用GraphQL,需要帮助了解如何知道在即将执行突变时要提供的根值。

具体示例:您要更新当前登录用户的用户名。突变看起来像这样:

 mutation TestMutation {
       updateMyUsername(newName: "CoolName") {
                       username }
}

此处提供的根对象是当前用户。但是当你收到变异而没有解析它并看到它的名字时,你怎么知道这个?基于URL无法做出决定,因为只存在一个端点。并且解析字符串只是为了将它再次发送到将被解析的地方听起来充其量只是浪费。

通常的做法是在URL或请求体中提供一些额外的参数来为应用程序提供更多的上下文吗?

2 个答案:

答案 0 :(得分:5)

在URL中包含更多数据并不常见,但由于每个变异都由函数支持,因此您无需解析其名称,只需在函数中定义即可。

由于突变始终处于顶级,因此它们的根对象始终是顶级根对象。如果您需要访问其他对象,则需要确保已提供足够的信息来检索它

要跟踪当前登录的用户,请查看context,这是运行GraphQL查询并在每个分辨率函数中提供的初始参数之一。上下文经常用于跟踪登录用户。

既然你有一个定义" changeMyUsername"的函数,你有登录用户,并且你有新用户名提供的参数,你应该拥有实现这个体的所需的一切那个功能。

答案 1 :(得分:0)

  

我正在尝试使用GraphQL,需要帮助了解如何知道在即将执行突变时要提供的根值。

如果您不知道要转发root变量的内容,那么您可能不需要任何变量,只需转发nullundefined。< / p>

  

具体例子:...
  这里提供的根对象是当前用户。

您应该将用户作为context变量传递,而不是root变量 与执行查询时可能采用的方式相同。

  

但是当你收到变异而没有解析它并看到它的名字时,你怎么知道呢?

您应该转发context对象中每个请求的用户对象 或者,如果必须从数据库加载用户数据,则转发用于加载用户的函数。