我正在使用Apollo提供的GraphQL工具/库 .
It is possible to merge remote GraphQL schema into a nested structure?
假设我有 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
类型下,它包含两个包含远程模式中的查询类型的新类型 . 已使用 graphql-tools
中的变换器重新命名了来自模式 MenuX
的 Item
,同样,来自模式 MenuY
的 Item
也已被变换 .
但也有可能改变结构吗?
使用实际的远程模式,我们正在查看每个模式中的数百种类型,理想情况下,我希望不会污染GraphiQL中的根类型和Introspection文档 .
2 回答
Apollo的graphql-tools包含一个transform schemas的模块 . 你应该可以用
MenuX
重命名所有内容然后你可以use the transformed schema作为
mergeSchemas
的输入 .请注意,顶级
Query
和Mutation
类型有些特殊,您可能希望尝试更直接地合并这些类型而不重命名它们,特别是如果它们不冲突 .可以实现模式,其中
Query
类型具有根字段作为源模式的入口点,但仅适用于Query
类型,因为Mutation
类型不支持在名称下嵌套突变 .因此,名称前缀是架构拼接的首选解决方案 .