使用 apollo-federation 独立构建 GraphQL 服务

Posted

技术标签:

【中文标题】使用 apollo-federation 独立构建 GraphQL 服务【英文标题】:Building GraphQL services in isolation with apollo-federation 【发布时间】:2020-09-30 05:21:36 【问题描述】:

我目前正在尝试测试 1 个服务的 graphql 端点,该端点最终将成为 apollo-federation/gateway graphql 服务器的一部分。此服务将扩展现有联合图中现有服务的类型。

如果我想使用 apollo-federation & gateway 单独测试我的服务,有没有办法在我的 graphql 架构中仍然使用 @extends@external 时做到这一点?目前网关抛出:UnhandledPromiseRejectionWarning: Error: Unknown type: "SomeTypeInAnotherServer",这是有道理的,因为没有要扩展的类型,但我可以忽略这个验证吗?

【问题讨论】:

github.com/xolvio/federation-testing-tool ? 把它扔在一个答案中,我会选择你!我不知道为什么我自己找不到这个。在发布此之前,我肯定做了一些研究。非常感谢! 【参考方案1】:

正如@xadm 在评论中发布的那样,您可以使用https://github.com/xolvio/federation-testing-tool 来解决我的问题。

【讨论】:

【参考方案2】:

您的问题看起来像是在尝试进行开发,但您给出的答案看起来像是在专门进行测试。我不知道这是否是由于工具而导致的结果,或者这是否是您的实际问题,但这是我为开发人员提供的答案:

如果您只是运行其中一项服务,您仍然可以对其进行查询,只需按照 ApolloGateway 的方式进行即可。比如说,你有一个 person-service 和一个 place-service,而且 People 可以访问很多地方:

个人服务

type Person @key(fields: "id") 
  id: ID!
  name: String


type Query 
  person(id: ID): Person # Assuming this is the only entry-point

地方服务

type Place 
  id: ID!
  name: String


extend type Person @key(fields: "id") 
  id: ID!
  placesVisited: [Place]

现在您可以对 place-service 进行以下查询:

query ($_representations: [_Any!]!) 
  _entities(representations:$_representations) 
    ... on Person 
      id
      placesVisited 
        id
        name
      
    
  

这是您的意见:


  "_representations": [
    "__typename": "Person",
    "id": "some-id-of-some-person"
  ]

【讨论】:

以上是关于使用 apollo-federation 独立构建 GraphQL 服务的主要内容,如果未能解决你的问题,请参考以下文章

使用独立工具链 android arm 构建本机库

使用具有“年”和“月”信息的两个独立系列构建热图

运行使用 SBT 和 ProGuard 构建的独立 jar 时出现 AbstractMethodError

使用 electron-builder 从电子应用程序构建独立的 .exe

在使用 react 构建的网站中提供另一个(独立)页面或静态文件

使用 scala sbt 构建一个独立的 jar 以合并到一个 android 项目中