在 Apollo 服务器中的什么地方指定接口类型的解析器?
Where do I specify the resolver for an interface type in Apollo server?
如果我的 typeDef 中有接口:
interface EntityBase @key(fields: "id") {
${commonEntProps}
}
然后我还需要像这样在我的解析器中使用 resolveType:
EntityBase: {
__resolveType(entBase, context, info) {
if (entBase.name) {
return 'Entity';
}
if (entBase.email) {
return 'User';
}
return null;
}
},
我明白这一点,但我不明白我在哪里或如何为 __resolverType 编辑的 return 类型声明解析器。我不是指 Entity 或 User 的属性,我指的是 Entity 和 User 类型本身,它们都已经在 resolvers 对象中定义,并为其属性映射。
如何告诉服务器对 return 实体或用户执行哪个方法?
简答:你不知道。
联合和接口是抽象类型,GraphQL 在运行时 解析为具体对象类型(在本例中为 Entity
或 User
)。如果您有一些 returns 列表 EntityBases
的字段,您将从数据库或其他数据源获取数据以获取这些对象。然后 GraphQL 将使用提供的 resolveType
函数来确定列表中每个对象的类型。对象的类型与实际查询相结合,然后确定响应的形状。
您不能使用对象的类型来确定获取对象的方法,因为它的类型由获取的数据决定。
如果我的 typeDef 中有接口:
interface EntityBase @key(fields: "id") {
${commonEntProps}
}
然后我还需要像这样在我的解析器中使用 resolveType:
EntityBase: {
__resolveType(entBase, context, info) {
if (entBase.name) {
return 'Entity';
}
if (entBase.email) {
return 'User';
}
return null;
}
},
我明白这一点,但我不明白我在哪里或如何为 __resolverType 编辑的 return 类型声明解析器。我不是指 Entity 或 User 的属性,我指的是 Entity 和 User 类型本身,它们都已经在 resolvers 对象中定义,并为其属性映射。
如何告诉服务器对 return 实体或用户执行哪个方法?
简答:你不知道。
联合和接口是抽象类型,GraphQL 在运行时 解析为具体对象类型(在本例中为 Entity
或 User
)。如果您有一些 returns 列表 EntityBases
的字段,您将从数据库或其他数据源获取数据以获取这些对象。然后 GraphQL 将使用提供的 resolveType
函数来确定列表中每个对象的类型。对象的类型与实际查询相结合,然后确定响应的形状。
您不能使用对象的类型来确定获取对象的方法,因为它的类型由获取的数据决定。