fullstack GraphQL学习笔记(5)服务端
GraphQL让后端开发人员专注于描述数据(构建schema),而不是维护API端口。
1、excution
GraphQL不仅指定了一种描述schema和query从这些schema中检索数据的方法,而且还指定了这些查询如何转换为结果的实际执行算法.算法的核心非常简单:逐个遍历query,为每个field执行“解析器”。所以,假设我们有以下schema:
type Query {
author(id: ID!): Author
}
type Author {
posts: [Post]
}
type Post {
title: String
content: String
}
以下是我们能够发送到具有该架构的服务器的query:
query {
author(id: "abc") {
posts {
title
content
}
}
}
我们可以看到查询的每个字段都是一个类型:
query: Query {
author(id: "abc"): Author {
posts: [Post] {
title: String
content: String
}
}
}
我们可以轻松找到服务器中的解析器,以便为每个字段运行。执行从查询类型开始,并以广度优先。这意味着我们首先运行解析器Query.author。然后,我们获取该解析器的结果,并将其传递给它的子字段,即解析器Author.posts。在下一级,结果是一个列表,因此在这种情况下,执行算法一次在一个项目上运行。所以执行的工作原理如下:
Query.author(root, { id: 'abc' }, context) -> author
Author.posts(author, null, context) -> posts
for each post in posts
Post.title(post, null, context) -> title
Post.content(post, null, context) -> content
最后,执行算法将所有内容放在一起,形成结果的正确形状并返回结果
2、批量执行DataLoader
为了避免重复查询,可以将所有的提取功能发在一起,指导所有的解析函数执行完毕,然后一次性向服务端发送不重复的请求。
浙公网安备 33010602011771号