node.js - (Apollo) GraphQL 合并模式
问题描述
我正在使用 Apollo 提供的 GraphQL 工具/库。
可以将远程 GraphQL 模式合并到嵌套结构中吗?
假设我有n
远程模式,我想将不同模式的Query
,Mutation
和合并Subscription
到一个模式中,除了每个远程模式都放在自己的type
.
假设我们有一个名为的远程模式MenuX
:
type Item {
id: Int!
description: String
cost: Int
}
type Query {
items: [Item]
}
和一个名为的远程模式MenuY
:
type Item {
id: Int!
name: String
cost: Int
}
type Query {
items: [Item]
}
我想将模式合并到一个单一的模式中,但在它们自己的类型下。一个人为的例子:
type MenuXItem {
id: Int!
description: String
cost: Int
}
type MenuYItem {
id: Int!
name: String
cost: Int
}
type MenuXQuery {
items: [MenuXItem]
}
type MenuYQuery {
items: [MenuYItem]
}
type Query {
MenuX: MenuXItem
MenuY: MenuYItem
}
正如我们所看到的,在Query
类型下它包含两个新类型,其中包含来自远程模式的查询类型。Item
from schemaMenuX
已通过使用转换器 from 重命名graphql-tools
,同样Item
from schemaMenuY
也已转换。
但是是否也可以改变结构?
对于实际的远程模式,我们正在查看每个模式的数百种类型,理想情况下,我不想污染 GraphiQL 中的根类型和自省文档。
解决方案
Apollo 的 graphql-tools 包含一个转换模式的模块。你应该能够MenuX
用类似的东西重命名所有东西
import {
makeRemoteExecutableSchema,
transformSchema,
RenameTypes
} from 'graphql-tools';
const schema = makeRemoteExecutableSchema(...);
const menuXSchema = transformSchema(schema, [
RenameTypes((name) => `MenuX${name}`)
]);
然后,您可以使用转换后的模式作为mergeSchemas
.
请注意,顶级Query
和Mutation
类型有些特殊,您可能希望尝试更直接地合并这些类型而不重命名它们,特别是如果它们不冲突。
推荐阅读
- swift - 委托功能在此代码中被破坏。我应该怎么做才能修复它?
- python - SQLAlchemy 自引用模型计数
- powershell - 在 Powershell 中查找重复的文件名
- c++ - 异或两个变量并将结果添加到第三个变量可与运算符 += 一起使用,但不适用于运算符 = 和 + 组合使用
- android - 同时按下两个按钮
- git - 如何将主父分支恢复到原始删除所有新合并的分支
- c# - 用户单击 ASP.NET Web 表单上的按钮与计时器运行调用相同按钮单击事件的方法之间的区别?
- c - 理解c中不同风格的#defines
- node.js - $lookup 中用于比较 objectId 的 mongodb $match 操作未按预期工作
- ios - 如何在免费试用期内提出 IAP 购买请求?