gpt4 book ai didi

graphql - 如何处理可以返回 graphql 中几种标量类型之一的字段

转载 作者:行者123 更新时间:2023-12-02 02:55:37 25 4
gpt4 key购买 nike

在 graphql(使用出色的 graphql-ruby gem)中,我试图返回一个对象,该对象的字段可以等于 bool 值、整数或字符串。我最初的想法是返回 bool 值、整数或字符串的联合,但 graphql-ruby 告诉我联合不能包含标量类型(我想这是规范强加的约束,而不是 graphql-ruby)。

我能想到的解决方案(不是很好)是将值作为 json 字符串返回并在客户端解析它。有没有更好的方法来处理可能是多个标量之一的返回值?

谢谢!

最佳答案

我已经能够通过创建一个 graphql 自定义标量类型来实现这一点,它只是检查以确保该值是 bool 值、整数或字符串,如果是,则返回该值不变。否则,返回错误。此解决方案不需要在客户端进行任何额外的解析。

在 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

注意:这个实现实际上也允许 float

关于graphql - 如何处理可以返回 graphql 中几种标量类型之一的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49626517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com