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
为了避免重复查询,可以将所有的提取功能发在一起,指导所有的解析函数执行完毕,然后一次性向服务端发送不重复的请求。