简短版:我可以使用 Apollo Federation 来替换 的功能delegateToSchema
,如果可以,如何?这个想法是重用来自另一个黑盒服务的解析器逻辑。
长版:
我已经在互联网上搜索了几个小时,试图弄清楚如何在不明确编写新解析器的情况下合并两个服务。Apollo 含糊地说你可以从模式拼接迁移到联邦,但是考虑这个例子:
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}) { ... }
这存在于我将其视为黑匣子的另一项服务中。手动编写一个新的解析器并不理想(或容易),特别是因为数据在那里,我只需要告诉 Apollo 如何获取它。我想也许我可以使用delegateToSchema
:
delegateToSchema({
schema: pgSchema,
operation: 'query',
fieldName: 'allPhotos(condition: {created_by: $username})',
args: { username: args.username },
context: context,
info: info
})
但从我在文档和文章中看到的情况来看,这是模式拼接,应该被联邦取代。理想情况下,如果可能的话,我只想使用联合来实现这一点。可能吗?文档没有说清楚,我看到的每个联邦示例仍然需要您编写自定义解析器。就好像指令只是给出提示以确保您在解析器中具有正确的字段,而不是实际执行任何逻辑。
任何帮助表示赞赏!