我正在研究graphql.org
的“ GraphQL.js入门”。在本教程中,graphql
方法的调用方式如下:
graphql(schema, '{ hello }', root).then((response) => {
console.log(response);
});
我对第二个参数'{ hello }'
感到困惑。我真的不知道我在看什么。这是否使用Javascript对象属性值的简写形式,因此它真的意味着'{ hello: hello }'
吗?如果是这样,该对象中的hello
值是否引用“ hello”解析器函数?如果是 情况,那么此对象中的键是做什么用的?
或者这在我不知道的GraphQL语法中有某些含义吗?
我转过身来。
答案 0 :(得分:2)
GraphQL.js的official tutorial显示使用架构定义语言(SDL)构建的架构。尽管SDL特定于GraphQL,但实际上不是。 GraphQL的实际“查询语言”部分具有单独的,有据可查的语法-该语法用于编写从客户端发送到GraphQL服务器的请求。另一方面,SDL用于创建模式,该模式定义特定GraphQL服务的功能。
这两种语法确实有一些相似之处(例如,它们都使用大括号),但不可互换。
如果我们使用SDL这样定义GraphQL模式:
type Query {
hello: String
goodbye: String
}
我们说的是查询根操作类型具有客户端可以请求的两个字段-hello
和goodbye
。作为客户,我们可以使用GraphQL语法请求一个或两个字段:
query {
hello
}
或...
query {
hello
goodbye
}
令牌之间的任何多余空白都将被忽略,因此第二个查询等效于:
query { hello goodbye }
另外,如果我们使用query
操作,而不是mutation
或subscription
,我们可以完全删除query
关键字,并且GraphQL会假定它是一个查询。这就是查询简写:
{
hello
goodbye
}
official tutorial在解释如何处理GraphQL请求方面做得很好。您也可以查看the specification以获得完整的说明和完整的示例。