处理混合类型的 GraphQL Schema

标签 graphql graphql-js

我最近开始研究使用 GraphQL 请求动态数据配置的可能性。让我印象深刻的第一件事是 GraphQL 的强类型概念。

GraphQL 模式有没有办法处理混合类型对象的数组?我将不胜感激解释或可能是我可以阅读的引用。

我目前正在使用带有 Node.js 的 GraphQL,但以后的实现将不在 Java 容器中。所有数据将从 MongoDB 中提取为 JSON。

最佳答案

你要么必须让这些不同的类型实现相同的接口(interface),要么让你的解析器返回联合,或者创建一个自定义标量来保存动态数据。

最简洁的方法是第一种:如果生成的对象的类型数量有限,请定​​义类型以使它们实现相同的接口(interface),并通过接口(interface)键入解析器。这允许客户端根据实际类型有条件地选择子字段,并维护类型安全。

第二种方法有类似的限制:您需要提前知道可能的类型,但它们不必实现相同的接口(interface)。当可能的值彼此不相关并且具有非此即彼的语义(如成功/失败)时,这是更可取的。

自定义标量方法是唯一不需要知道结果的可能类型的方法,即结果的结构可以是完全动态的。 Here's an implementation这种方法,称为 JSON 标量(即将任何 JSON 可序列化结构塞入标量值)。这种方法的一大缺点是它使子选择成为不可能,因为整个值变成了一个大标量(即使它是一个复杂的对象)。

关于处理混合类型的 GraphQL Schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232966/

相关文章:

javascript - GraphQL 连接

reactjs - Apollo GraphQL 本地和全局错误处理

javascript - 解构 Flow 对象类型?

node.js - GraphQL Node JS 应用程序的单元测试

javascript - 如何在 Graphql 模式中定义日期数据类型?

graphql - 使用 Graphql 和 Amplify/AppSync 根据先前值进行突变

javascript - 将 graphQL 片段添加到模式,并可用于所有查询

node.js - GraphQL 所需的最低 Node 版本?

javascript - 如何访问 GraphQL 解析器中的请求对象(使用 Apollo-Server-Express)