简短版: 我是否可以使用阿波罗联合会来取代以下功能?delegateToSchema
如果是,怎么做?我们的想法是重用另一个黑盒服务的解析逻辑。
长版:
我在互联网上找了好几个小时,试图找出如何在不明确写一个新的解析器的情况下合并两个服务。Apollo含糊地说,你可以从schema-stitching迁移到federation,但考虑这个例子。
type User @key(fields: "username"){
username: ID!
photos: [Photo] @provides(fields: "created_by")
}
extend type Photo @key(fields: "id") {
id: ID! @external
created_by: ID! @external # I want to match this with username
}
我正在使用PostGraphile将我的数据库转换为GraphQL模式 并为CRUD提供所有必要的解析器。已经有一个查询,我可以用它来获取特定用户的照片。
allPhotos(condition: {created_by: $username}) { ... }
这存在于另一个服务中,我将其视为一个黑盒。手动编写一个新的解析器并不理想(或者说不容易),尤其是当数据 有没有我只需要告诉阿波罗如何得到它。我想也许我可以用 delegateToSchema
:
delegateToSchema({
schema: pgSchema,
operation: 'query',
fieldName: 'allPhotos(condition: {created_by: $username})',
args: { username: args.username },
context: context,
info: info
})
但从我在文档和文章中看到的情况来看,这是schema-stitching,应该被federation取代。如果可能的话,理想情况下我只想用联合来实现这个目标。这可能吗?文档没有说清楚,而且我看到的每一个使用federation的例子都还需要你写一个自定义的解析器。这就好像指令只是提供了一些提示,以确保你的解析器中有正确的字段,而不是真正的做任何逻辑。
感谢任何帮助
这是可能的。你的 created_by
应该是一个User而不是一个ID!,你需要在实现Photo的服务中支出User。