如何 return 来自 GraphQL 突变的联合类型
How to return a Union type from a GraphQL Mutation
我想将此模式用于 returning 来自 GraphQL 的验证失败 Ruby:https://medium.com/@sachee/200-ok-error-handling-in-graphql-7ec869aec9bc
从我的突变中,我希望能够 return 一个像这样的联合的有效负载:
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
而我在 mutation 中的 resolve 方法是这样的;
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 中 return 联合作为有效负载?
这个问题的答案其实很简单。如果您想 return 与突变不同的类型,在我的例子中是上面的 RegistrationPayloadType。
class RegistrationMutation < Base::Mutation
argument :input, Inputs::RegistrationInputType, required: true
payload_type RegistrationPayloadType
...
end
使用 payload_type class 方法得到了我需要的东西。
此博客 (https://www.abhaynikam.me/posts/polymorphic-types-with-graphql-ruby/) 介绍了如何在 GraphQL-ruby 中将联合类型用于多态类型。在这里,不是使用 payload_type
而是返回另一个字段 Type 来解析联合类型。
我想将此模式用于 returning 来自 GraphQL 的验证失败 Ruby:https://medium.com/@sachee/200-ok-error-handling-in-graphql-7ec869aec9bc
从我的突变中,我希望能够 return 一个像这样的联合的有效负载:
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
而我在 mutation 中的 resolve 方法是这样的;
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 中 return 联合作为有效负载?
这个问题的答案其实很简单。如果您想 return 与突变不同的类型,在我的例子中是上面的 RegistrationPayloadType。
class RegistrationMutation < Base::Mutation
argument :input, Inputs::RegistrationInputType, required: true
payload_type RegistrationPayloadType
...
end
使用 payload_type class 方法得到了我需要的东西。
此博客 (https://www.abhaynikam.me/posts/polymorphic-types-with-graphql-ruby/) 介绍了如何在 GraphQL-ruby 中将联合类型用于多态类型。在这里,不是使用 payload_type
而是返回另一个字段 Type 来解析联合类型。