10

graphQLOptions中,上下文和根值有什么区别?

我什么时候应该使用一个,什么时候应该使用另一个?

目前我正在将连接器和其他敏感数据附加到上下文中,这安全吗?用户可以读取他的查询的上下文或根值吗?

4

2 回答 2

8

GraphQL 类型/字段的概念是相当递归的。通常称为RootQuery的自定义类型与架构中的任何其他类型一样多。通常,这种RootQuery类型只包含动态解析的字段,但这不是限制。如果您希望人们访问类型name上的字符串标量字段,User则无需为其编写解析器函数,只要解析为任何User返回字段的对象包含该name属性即可;这与 的工作方式相同RootValue,但该对象将是通过 提供的对象rootValue

另一方面,上下文是可供每个解析器使用的东西,但任何用户向 GraphQL 服务器发送查询都不会对其进行查询——因此,上下文是保存敏感数据(例如会话信息)的理想场所。

示例: 这里是 rootValue 的示例用法:https ://runkit.com/lucasconstantino/graphql-root-value-sample

于 2017-06-21T04:19:50.937 回答
8

RootValue是传入查询入口点的初始值。默认情况下它是未定义的,但如果这适合您的用例,Apollo 允许您使用一些值来为查询播种。它可作为解析器函数签名中的第一个参数访问。

context是可供所有解析器使用的共享参考。通常它是一个 key/val 对的对象,其中包含有状态的外部连接或元关注点(如 users/auth/etc)的句柄。

用户(我假设您的意思是客户)只能读取您从解析器返回的内容;内省查询中不​​表示上下文。如果您的解析器需要访问权限以履行其职责,则将敏感数据和连接器(在 Apollo 范例中)放在那里是安全的。

于 2017-06-14T14:53:42.303 回答