在graphql.js中调用graphql方法时,requestString参数是什么?

时间:2019-04-15 14:19:19

标签: graphql graphql-js

我正在研究graphql.org的“ GraphQL.js入门”。在本教程中,graphql方法的调用方式如下:

graphql(schema, '{ hello }', root).then((response) => {
  console.log(response);
});

我对第二个参数'{ hello }'感到困惑。我真的不知道我在看什么。这是否使用Javascript对象属性值的简写形式,因此它真的意味着'{ hello: hello }'吗?如果是这样,该对象中的hello值是否引用“ hello”解析器函数?如果是 情况,那么此对象中的键是做什么用的?

或者这在我不知道的GraphQL语法中有某些含义吗?

我转过身来。

1 个答案:

答案 0 :(得分:2)

GraphQL.js的official tutorial显示使用架构定义语言(SDL)构建的架构。尽管SDL特定于GraphQL,但实际上不是。 GraphQL的实际“查询语言”部分具有单独的,有据可查的语法-该语法用于编写从客户端发送到GraphQL服务器的请求。另一方面,SDL用于创建模式,该模式定义特定GraphQL服务的功能。

这两种语法确实有一些相似之处(例如,它们都使用大括号),但不可互换。

如果我们使用SDL这样定义GraphQL模式:

type Query {
  hello: String
  goodbye: String
}

我们说的是查询根操作类型具有客户端可以请求的两个字段-hellogoodbye。作为客户,我们可以使用GraphQL语法请求一个或两个字段:

query {
  hello
}

或...

query {
  hello
  goodbye
}

令牌之间的任何多余空白都将被忽略,因此第二个查询等效于:

query { hello goodbye }

另外,如果我们使用query操作,而不是mutationsubscription,我们可以完全删除query关键字,并且GraphQL会假定它是一个查询。这就是查询简写

{
  hello
  goodbye
}

official tutorial在解释如何处理GraphQL请求方面做得很好。您也可以查看the specification以获得完整的说明和完整的示例。