Graphql 阿波罗联合会:联合会取代了delegateToSchema吗?

Graphql 阿波罗联合会:联合会取代了delegateToSchema吗?,graphql,apollo,apollo-server,postgraphile,apollo-federation,Graphql,Apollo,Apollo Server,Postgraphile,Apollo Federation,短版本:我是否可以使用阿波罗联盟来替换delegateToSchema的功能,如果可以,如何替换?其思想是重用来自另一个黑匣子服务的解析器逻辑 长版本: 我在互联网上搜索了几个小时,试图找出如何在不显式编写新解析器的情况下合并两个服务。阿波罗模糊地说,你可以从模式拼接迁移到联邦,但是考虑这个例子: type User @key(fields: "username"){ username: ID! photos: [Photo] @provides(fields: "created_by"

短版本:我是否可以使用阿波罗联盟来替换
delegateToSchema
的功能,如果可以,如何替换?其思想是重用来自另一个黑匣子服务的解析器逻辑

长版本

我在互联网上搜索了几个小时,试图找出如何在不显式编写新解析器的情况下合并两个服务。阿波罗模糊地说,你可以从模式拼接迁移到联邦,但是考虑这个例子:

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({
  schema: pgSchema,
  operation: 'query',
  fieldName: 'allPhotos(condition: {created_by: $username})',
  args: { username: args.username },
  context: context,
  info: info
})
但从我在文档和文章中看到的情况来看,这是模式缝合,应该被联邦所取代。理想情况下,如果可能的话,我只想使用联邦来实现这一点。可能吗?文档中没有明确说明,我所看到的每个联邦示例仍然要求您编写自定义解析器。这几乎就像指令只是给出提示,以确保解析器中有正确的字段,而不是实际执行任何逻辑


感谢您的帮助

这是可能的。由创建的
应该是用户而不是ID!,您需要在服务中删除用户