为GraphQL中的字段分配多个类型

为GraphQL中的字段分配多个类型,graphql,graphql-js,graphql-java,Graphql,Graphql Js,Graphql Java,在我的数据库中,事件字段用字符串数组动态填充,而有些字段用文本(无数组)手动填充。当我执行查询时,仅用字符串填充的结果(不在数组中)显示为null 架构中的字段是:Event:[String] 在GraphQL中有没有一种方法可以同时指定[String]和String类型的字段?我尝试了以下操作,但出现语法错误: union test = [String] | String Event: test 注意:手动分配的不在一个数组中。来自规范: GraphQL联合表示一个对象,该对象可以是Gra

在我的数据库中,
事件
字段用字符串数组动态填充,而有些字段用文本(无数组)手动填充。当我执行查询时,仅用字符串填充的结果(不在数组中)显示为null

架构中的字段是:
Event:[String]

在GraphQL中有没有一种方法可以同时指定[String]和String类型的字段?我尝试了以下操作,但出现语法错误:

union test = [String] | String

Event: test
注意:手动分配的不在一个数组中。

来自规范:

GraphQL联合表示一个对象,该对象可以是GraphQL对象类型列表中的一个,但在这些类型之间不提供保证字段

联合不能包括标量或列表;它们只能包含类型。这意味着一个联盟不适合你想要实现的目标。此外,一个字段只能返回一个标量、类型、联合或接口,因此没有固有的方法返回某个对象或该对象的数组

但是,您可以利用自定义标量来创建所需的行为。apollo文档在概述如何创建和实现自己的标量方面做得很好,因此您可以。然而,对于你的特殊情况,我认为已经有一个标量可以实现这个目的--。我相信字符串和字符串数组都是有效的JSON值,因此它们应该与该库一起使用


最后,我建议不要这样设计您的模式。实际上,您正在丢失该字段的类型验证,并在该字段将解析为什么方面引入不必要的歧义。这将使任何使用API的客户机都更容易始终只返回字符串数组。如果数据库返回单个字符串,只需将其包装在数组中,然后再将其返回到解析器中。这将防止客户端不必要地检查它是否接收到字符串或数组。

GraphQL中的单个项目列表可以按语法视为单个对象。所以
[String]
对你来说应该很好。还有别的问题。