通过批处理相同类型从远程服务器加入模式
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
}
}
}
那么即使 username
和 email
不在第一个模式中,它也可以通过 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 帮助了很多
我是 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
}
}
}
那么即使 username
和 email
不在第一个模式中,它也可以通过 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 帮助了很多