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

How to decide what root value to use for GraphQL mutations

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

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

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

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

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

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

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

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

现在您已经拥有定义 "changeMyUsername" 的函数,您拥有登录用户,并且您拥有提供的带有新用户名的参数,您应该拥有实现该主体所需的一切功能。

I'm experimenting with GraphQL and need help understanding how to know what root value to provide when a mutation is about to be performed.

如果您不知道要转发什么作为 root 变量,那么您可能不需要任何变量,您可以直接转发 nullundefined.

Concrete example: ...
The root object to provide here is the current user.

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

But how do you know this when you receive the mutation without parsing it and seeing its name?

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