如何从 GraphQL Mutation 返回 Union 类型
Posted
技术标签:
【中文标题】如何从 GraphQL Mutation 返回 Union 类型【英文标题】:How to return a Union type from a GraphQL Mutation 【发布时间】:2020-04-21 01:34:17 【问题描述】:我想使用此模式从 GraphQL Ruby 返回验证失败:https://medium.com/@sachee/200-ok-error-handling-in-graphql-7ec869aec9bc
从我的突变中,我希望能够返回一个像这样的联合的有效负载:
class RegistrationPayloadType < Base::Union
possible_types UserType, ValidationFailureType
def self.resolve_type(object, context)
if context.current_user.present?
UserType
else
ValidationFailureType
end
end
end
而我在突变中的解析方法是这样的;
def resolve(input:)
@input = input.to_h
if registration.save
candidate
else
registration.errors
end
end
然后客户端可以这样调用突变;
mutation UserRegistrationMutation($input: UserRegistrationInput!)
userRegistration(input: $input)
__typename
... on User
id
... on ValidationFailure
path
message
如何在 GraphQL-ruby 中返回联合作为有效负载?
【问题讨论】:
【参考方案1】:这个问题的答案其实很简单。如果你想从突变中返回不同的类型,在我的例子中是上面的 RegistrationPayloadType。
class RegistrationMutation < Base::Mutation
argument :input, Inputs::RegistrationInputType, required: true
payload_type RegistrationPayloadType
...
end
使用 payload_type 类方法得到了我需要的东西。
【讨论】:
【参考方案2】:这篇博客(https://www.abhaynikam.me/posts/polymorphic-types-with-graphql-ruby/) 介绍了如何在 GraphQL-ruby 中将联合类型用于多态类型。这里,不是使用payload_type
,而是返回另一个解析联合类型的字段类型。
【讨论】:
以上是关于如何从 GraphQL Mutation 返回 Union 类型的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Apollo 从 GraphQL Mutation 设置 Auth token cookie
React Apollo GraphQL Mutation 返回 400(错误请求)
Graphql shield 返回 Not Authorized for allowed mutation