我最近开始研究使用 GraphQL 请求动态数据配置的可能性。让我印象深刻的第一件事是 GraphQL 的强类型概念。
GraphQL 模式有没有办法处理混合类型对象的数组?我将不胜感激解释或可能是我可以阅读的参考。
我目前正在使用带有 Node.js 的 GraphQL,但以后的实现将不在 Java 容器中。所有数据将从 MongoDB 中提取为 JSON。
我最近开始研究使用 GraphQL 请求动态数据配置的可能性。让我印象深刻的第一件事是 GraphQL 的强类型概念。
GraphQL 模式有没有办法处理混合类型对象的数组?我将不胜感激解释或可能是我可以阅读的参考。
我目前正在使用带有 Node.js 的 GraphQL,但以后的实现将不在 Java 容器中。所有数据将从 MongoDB 中提取为 JSON。
你要么必须让这些不同的类型实现相同的接口,要么让你的解析器返回联合,或者创建一个自定义标量来保存动态数据。
最简洁的方法是第一种:如果生成的对象的类型数量有限,请定义类型以使它们实现相同的接口,并通过接口键入解析器。这允许客户端根据实际类型有条件地选择子字段,并维护类型安全。
第二种方法有类似的限制:您需要提前知道可能的类型,但它们不必实现相同的接口。当可能的值彼此不相关并且具有非此即彼的语义(如成功/失败)时,这是更可取的。
自定义标量方法是唯一不需要知道结果的可能类型的方法,即结果的结构可以是完全动态的。这是该方法的一个实现,称为 JSON 标量(即将任何 JSON 可序列化结构塞入一个标量值)。这种方法的一大缺点是它使子选择成为不可能,因为整个值变成了一个大标量(即使它是一个复杂的对象)。
如果数据完全是 JSON 并且您希望按原样保留它们,请查看JSON scalar type。基本上,
import { GraphQLObjectType } from 'graphql';
import GraphQLJSON from 'graphql-type-json';
export default new GraphQLObjectType({
name: 'MyType',
fields: {
myField: { type: GraphQLJSON },
},
});
我认为可以制作适合需要的自定义/通用类型。因此,它仍然是一个强类型数组,但类型将足够灵活以设置您需要的内容。
这是一个自定义类型的示例: https ://github.com/stylesuxx/graphql-custom-types