首页 > 解决方案 > 通过批处理相同的类型从远程服务器加入模式

问题描述

我是阿波罗服务器的新手,我正在努力理解如何将远程模式变成一个庞大的方案,我能够加入模式并且现在可以查询数据,但是,我似乎无法链接/解决类型,我的两个微服务对那些在任何地方都相同的类型使用相同的类型名称,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
    }
  }
}

然后即使usernameandemail不在第一个模式中,它也可以通过pk身份验证模式解析这些字段

我用过这样的东西

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

加入我的模式,那么我什至如何让两者按照我的意愿一起工作?提前非常感谢

标签: graphqlapolloapollo-servergraphql-tools

解决方案


我能够让它工作,我用过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我各自的端点中的所有 's 进行了查询。感谢您查看这里的 guid https://www.graphql-tools.com/docs/stitch-type-merging帮助很大


推荐阅读