合并外部和本地数据,并使用graphql

时间:2017-05-24 08:59:53

标签: graphql graphql-js

假设我有来自外部API的数据称为“帖子”。 “帖子”中的每个帖子都有“标题”和“内容”字段。我无法控制这个外部API,“帖子”就是这样。

在我的应用程序中,在本地,我想为每个帖子添加更多字段。这些字段是“类别”和“标签”。

然后,我想使用graphql查询我的后端API,因此我的查询从外部API和本地API中提取数据。例如

{
  post (id: 2){
    title, # external
    content, # external
    category, # local
    tags # local
  }
}

我怎样才能完成它? 我应该制作第三段数据(模型),以某种方式将外部和本地数据合并在一起,然后查询这些数据?或者,我的本地字段是否应该以某种方式从外部节点提取ID并将它们与自己的数据一起保存在这些字段中?

1 个答案:

答案 0 :(得分:0)

非常简单,您可以创建一个函数,在调用本地数据的同时调用外部API,并返回一个合并对象:

function fetchPost(postId) {

  return Promise.all([
    getPostFromExternalAPI(postId),
    getCategoryForPost(postId),
    getTagsForPost(postId),
  ])
  .then(([ post, category, tags ]) => {
    return Object.assign(post, {
      category,
      tags,
    });
  });
}

然后,您的帖子字段解析器将具有以下形状:

const postFieldResolver = (_, args, context) => fetchPost(args.id)

这是性能方面的最佳选择。