如何处理可以 return graphql 中几种标量类型之一的字段
How to handle a field that could return one of several scalar types in graphql
在 graphql 中(使用优秀的 graphql-ruby gem),我正在尝试 return 一个对象,其字段可以等于布尔值、整数或细绳。我最初的想法是 return 布尔值、整数或字符串的联合,但是 graphql-ruby 告诉我联合不能包含标量类型(我想这是规范强加的约束,而不是 graphql -ruby).
我能想到的解决方案(不是很好)是 return 将值作为 json 字符串并在客户端解析它。有没有更好的方法来处理可能是多个标量之一的 return 值?
谢谢!
我已经能够通过创建一个 graphql 自定义标量类型来实现这一点,它只是检查以确保值是布尔值、整数或字符串,如果是,returns 该值不变.否则,返回错误。此解决方案不需要在客户端进行任何额外的解析。
在graphql-ruby中,实现看起来像
GraphScalar::AnyPrimative = GraphQL::ScalarType.define do
name "AnyPrimativeScalar"
coerce_input ->(value, ctx) {
case value
when String, TrueClass, FalseClass, Integer, Float then value
else
GraphQL::ExecutionError.new("Invalid value type: #{value.class.name}")
end
}
coerce_result ->(value, ctx) {
case value
when String, TrueClass, FalseClass, Integer, Float then value
else
GraphQL::ExecutionError.new("Invalid value type: #{value.class.name}")
end
}
end
注意:这个实现实际上也允许浮点数
在 graphql 中(使用优秀的 graphql-ruby gem),我正在尝试 return 一个对象,其字段可以等于布尔值、整数或细绳。我最初的想法是 return 布尔值、整数或字符串的联合,但是 graphql-ruby 告诉我联合不能包含标量类型(我想这是规范强加的约束,而不是 graphql -ruby).
我能想到的解决方案(不是很好)是 return 将值作为 json 字符串并在客户端解析它。有没有更好的方法来处理可能是多个标量之一的 return 值?
谢谢!
我已经能够通过创建一个 graphql 自定义标量类型来实现这一点,它只是检查以确保值是布尔值、整数或字符串,如果是,returns 该值不变.否则,返回错误。此解决方案不需要在客户端进行任何额外的解析。
在graphql-ruby中,实现看起来像
GraphScalar::AnyPrimative = GraphQL::ScalarType.define do
name "AnyPrimativeScalar"
coerce_input ->(value, ctx) {
case value
when String, TrueClass, FalseClass, Integer, Float then value
else
GraphQL::ExecutionError.new("Invalid value type: #{value.class.name}")
end
}
coerce_result ->(value, ctx) {
case value
when String, TrueClass, FalseClass, Integer, Float then value
else
GraphQL::ExecutionError.new("Invalid value type: #{value.class.name}")
end
}
end
注意:这个实现实际上也允许浮点数