在graphQLOptions中,context和rootvalue有什么区别?
我什么时候应该使用另一个?我应该何时使用另一个?
目前我正在将连接器和其他敏感数据附加到上下文中,这样安全吗?用户可以读取查询的上下文或根值吗?
答案 0 :(得分:6)
GraphQL类型/字段概念非常递归。通常称为RootQuery
的自定义类型与架构中的任何其他类型一样。但是,通常,此RootQuery
类型仅包含动态解析的字段,但这不是限制。如果您希望人们访问name
类型的字符串标量User
字段,则无需为其编写解析器函数,只要该对象解析为任何User
返回字段包含name
属性;这与RootValue
的工作方式相同,但对象将是通过rootValue
提供的对象。
<强>示例:强> 这里是rootValue的示例用法:https://runkit.com/lucasconstantino/graphql-root-value-sample
答案 1 :(得分:3)
RootValue
是传递给查询入口点的初始值。默认情况下它是未定义的,但是如果适合您的用例,Apollo允许您使用某些值为查询设定种子。它可以作为解析器函数签名中的第一个参数访问。
context
是所有解析器都可以使用的共享参考。通常,它是key / val对的对象,包含有状态外部连接的句柄或者诸如users / auth / etc之类的元关注。
用户(我假设您的意思是客户)只能读取您从解析器返回的内容;上下文未在内省查询中表示。如果您的解析器需要访问权限来履行其职责,那么将敏感数据和连接器(在Apollo范例中)放在那里是安全的。
有关rootValue如何工作的快速演示,请参阅this launchpad。