阿波罗联邦:联邦是否取代 delegateToSchema?

问题描述 投票:0回答:1

简短版: 我是否可以使用阿波罗联合会来取代以下功能?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的例子都还需要你写一个自定义的解析器。这就好像指令只是提供了一些提示,以确保你的解析器中有正确的字段,而不是真正的做任何逻辑。

感谢任何帮助

graphql apollo apollo-server postgraphile apollo-federation
1个回答
0
投票

这是可能的。你的 created_by 应该是一个User而不是一个ID!,你需要在实现Photo的服务中支出User。

© www.soinside.com 2019 - 2024. All rights reserved.