gpt4 book ai didi

node.js - (Apollo) GraphQL 合并模式

转载 作者:搜寻专家 更新时间:2023-10-31 23:15:04 24 4
gpt4 key购买 nike

我正在使用 Apollo 提供的 GraphQL 工具/库。

可以将远程 GraphQL 架构合并到嵌套结构中吗?

假设我有 n 个远程模式,我想合并 QueryMutationSubscription从不同的模式到一个单一的模式,不同的是,每个远程模式都放在自己的 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 类型下,它包含两个新类型,其中包含来自远程模式的查询类型。来自 MenuXItem 已使用来自 graphql-tools 的转换器重命名,类似 Item 来自 >MenuY 也进行了转换。

但是也可以转换结构吗?

对于实际的远程模式,我们正在查看每个模式的数百种类型,理想情况下,我不希望污染 GraphiQL 中的根类型和自省(introspection)文档。

最佳答案

Apollo 的 graphql-tools 包含一个模块 transform schemas .您应该能够重命名 MenuX 中的所有内容,例如

import {
makeRemoteExecutableSchema,
transformSchema,
RenameTypes
} from 'graphql-tools';
const schema = makeRemoteExecutableSchema(...);
const menuXSchema = transformSchema(schema, [
RenameTypes((name) => `MenuX${name}`)
]);

然后你可以use the transformed schema作为 mergeSchemas 的输入。

请注意,顶级 QueryMutation 类型有些特殊,您可能想尝试更直接地合并这些类型而不重命名它们,特别是如果它们不'冲突。

关于node.js - (Apollo) GraphQL 合并模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52504178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com