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