通过批处理相同类型从远程服务器加入模式

joining schemas from remote server by batching same types

我是 apollo 服务器的新手,我非常努力地了解如何使远程模式成为一个巨大的方案,我能够加入模式并且现在可以查询数据,但是,我似乎无法做到对于 link/resolve 类型,我的两个微服务对那些到处都相同的类型使用相同的类型名称, pk 在所有服务中都很常见,只有一个只有 pk 和另一个有一些额外的领域, 我的商店架构如下所示

type UserType implements Node {
  id: ID!
  shops: [ShopType]
  pk: Int
}

在这种情况下,真正重要的是 pk,因为它应该与我的身份验证模式相结合,看起来像这样

type UserType implements Node {
      id: ID!
      username: String
      email: String
      pk: Int
    }

对于许多其他字段,我希望能够在 appolo 服务器中加入这两个字段的数据字段,因为这是我合并我的两个模式的地方,这样每当我查询时

{
  shops {
    shopOwner {
      username
      email
    }
  }
}

那么即使 usernameemail 不在第一个模式中,它也可以通过 pk 从身份验证模式

解析这些字段

我用过类似的东西

const createNewSchema = async () => {
    const schemas = await createRemoteExecutableSchemas();
    return mergeSchemas({
        schemas,
    });
};

加入我的模式,那么我如何才能让两者按照我的意愿一起工作呢?非常感谢

我能够让它工作,我使用了 stitchschemas,它看起来像这样

const createNewSchema = async () => {
    const schemas = await createRemoteExecutableSchemas();
    return stitchSchemas({
        subschemas: [
            {
                schema: schemas['shop'],
                merge: {
                    UserType: {
                        entryPoints: [
                            {
                                fieldName: 'shopOwnerById',
                                selectionSet: '{ pk }',
                                args: originalObject => ({ pk: originalObject.pk }),
                            },
                            {
                                fieldName: 'shopById',
                                selectionSet: '{ pk }',
                                args: originalObject => ({ pk: originalObject.pk }),
                            }
                        ]

                    },
                },
            }, {
                schema: schemas['auth'],
                merge: {
                    UserType: {
                        entryPoints: [
                            {
                                fieldName: 'userById',
                                selectionSet: '{ pk }',
                                args: originalObject => ({ pk: originalObject.pk }),
                            },
                        ]

                    }
                }
            }
        ],
        mergeTypes: true,
    });
};

在我的例子中,只是为了不让任何人混淆,我将 schemas 设为字典,其中每个字典都是它链接到的 API 的名称。还必须确保我在各自的任务中查询了所有 fieldName。感谢您查看这里的 guid https://www.graphql-tools.com/docs/stitch-type-merging 帮助了很多