如何解决带有批量查询的模式拼接 postgraphile 服务
我有两个目标:
从我所做的阅读来看,似乎有两种主要方法:
-
Schema-stitching 来自
graphql-tools
-
Apollo federation 来自
apollo-federation
我已经尝试了每一个,但我目前正在使用模式拼接方法。假设我有一个服务公开的用户和另一项服务公开的帖子:
[user subschema]
type User {
id: ID!
name: String!
}
[post subschema]
type Post {
id: ID!
userId: ID!
content: String!
}
现在假设我想查询所有用户并获取每个用户的帖子列表。如果这两个都是由同一个服务实现的,Postgraphile 将足够聪明,可以将请求批处理在一起。但由于他们在不同的服务中,我需要做一些工作来实现这一点:
- 在网关中,我需要将
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,});
}
}
这很好用,但是对于我想要有效查询的类型之间的每种关系,似乎需要做很多工作 - 我是否遗漏了什么?是否有更自然的方法来配置网关/后图形子模式以自动处理查询批处理?
注意:我已经为网关上的每个子模式配置了 batch: true
,并在 postgraphile 服务上配置了 enableQueryBatching: true
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。