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

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

 

 

 
posted @ 2018-08-28 13:31  tutu_python  阅读(133)  评论(0)    收藏  举报