带有批量查询的模式拼接 postgraphile 服务

问题描述

我有两个目标:

  1. 在任何有趣的数据库上启动 postgraphile 服务
  2. 创建一个网关,将这些服务组合成一个仍然具有高性能的图形(具体来说,我对批量查询感兴趣)

从我所做的阅读来看,似乎有两种主要方法:

  1. Schema-stitching 来自 graphql-tools
  2. Apollo federation 来自 apollo-federation

我已经尝试了每一个,但我目前正在使用模式拼接方法。假设我有一个服务公开的用户和另一项服务公开的帖子:

[user subschema]
type User {
  id: ID!
  name: String!
}

[post subschema]
type Post {
  id: ID!
  userId: ID!
  content: String!
}

现在假设我想查询所有用户并获取每个用户的帖子列表。如果这两个都是由同一个服务实现的,Postgraphile 将足够聪明,可以将请求批处理在一起。但由于他们在不同的服务中,我需要做一些工作来实现这一点:

  1. 在网关中,我需要将 delegateToSchema 更新为 batchDelegateBySchema
batchPosts: {
  selectionSet: "{ id }",resolve(user,args,context,info) {
    return batchDelegateToSchema({
      schema: postsSubSchema,operation: "query",fieldName: "postsByUserIds",key: user.id,argsFromKeys: (ids) => ({ ids }),valuesFromResults: (results,keys) => {
        return keys.map((id) => {
          return results.filter((f) => f.user_id === id);
        });
      },info,});
  }
}
  1. 在 postgraphile 服务上,我需要添加一个 favoritesByUserIds 解析器,它接收用户 ID 列表并返回每个用户 ID 的收藏夹

这很好用,但是对于我想要有效查询的类型之间的每种关系,似乎需要做很多工作 - 我是否遗漏了什么?是否有更自然的方法来配置网关/后图形子模式以自动处理查询批处理?

注意:我已经为网关上的每个子模式配置了 batch: true,并在 postgraphile 服务上配置了 enableQueryBatching: true

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...