如何在Apollo服务器中为接口类型指定解析器?

时间:2019-08-02 13:48:36

标签: graphql apollo apollo-server

如果我的typeDefs中包含以下接口:

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返回的类型的解析器。我的意思不是Entity或User的属性,而是Entity和User本身的类型,它们都已经在resolvers对象中定义,并带有它们的属性映射。

如何告诉服务器执行哪种方法返回实体或用户?

1 个答案:

答案 0 :(得分:1)

简短的回答:您不会。

联合和接口是GraphQL在运行时将解析为具体对象类型(在这种情况下为EntityUser)的抽象类型。如果您有某个字段返回EntityBases的列表,则将从数据库或其他数据源中获取数据以获取这些对象。然后,GraphQL将使用提供的resolveType函数来确定列表中每个对象的类型。对象的类型,再结合实际的查询,即可确定响应的形状。

您不能使用对象的类型来确定获取对象的方法,因为它的类型由获取的数据确定。