我将一些服务设置为Apollo联合服务的数据源。每个数据源服务都描述一个Node interface
:
interface Node { id: ID!}
-此interface
由具有唯一ID的每个type
实现。
我在前端使用Relay来生成查询,它在对Union模型的查询中引入了Node
片段。当我运行一个查询时,该查询依赖于从两个服务中获取的数据,其中一个服务尝试解决实现Node
接口的每个模型上的Node选择,甚至是从那些类型不相同的类型中,都会发生错误。在服务上不存在。当我从中继生成的查询中删除Node
片段时,它再次起作用。
这是设置:
用户数据源架构:
interface Node {
id: ID!
}
type User implements Node @key(fields: "id") {
id: ID!
email: String!
firstName: String!
lastName: String!
phoneNumber: String
}
帐户数据源架构:
interface Node {
id: ID!
}
enum AccountType {
ADMIN
CUSTOMER
}
extend type User @key(fields: "id") {
id: ID! @external
email: String! @external
account(type: AccountType!): Account
}
union Account = AdminAccount | CustomerAccount
enum AccountStatus = {
OPEN
CLOSED
}
type AdminAccount implements Node {
id: ID!
status: AccountStatus!
// other fields
}
type CustomerAccount implements Node {
id: ID!
status: AccountStatus!
// other fields
}
在Postman / Prisma游乐场中运行的查询:
query {
user {
id
firstName
lastName
phoneNumber
account(type:ADMIN){
... on AdminAccount {
status
}
}
}
}
中继生成的查询会导致错误:
query {
user {
id
firstName
lastName
phoneNumber
account(type:ADMIN){
... on AdminAccount {
status
... on Node {
id
}
}
}
}
}
我遇到了两种类型的一系列错误:
"GraphQLError: Fragment cannot be spread here as objects of type \"Account\" can never be of type \"User\".",
和
Unknown type \"[type from other data source]\". Did you mean \"[type from Accounts data source]\" or \"[other type from Accounts data source]\"?"
实现types
接口的其他Node
都会重复出现这两个错误。
我是否在查询中遗漏了一些东西,这些东西会指导解析器解决该查询?