问题标签 [apollo-federation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
263 浏览

typescript - @apollo/federation 包的替代品

我们正在使用 REST API 开发 typescript 微服务。我们考虑在每个微服务上实现 GraphQL,在顶层添加一个 API 网关,因此它只是一个 API。目前我们只是在学习可以做什么,我们对 GraphQL 服务器一无所知。

我们读到不推荐使用模式拼接,我们对模式联合更感兴趣。

有没有阿波罗联盟的替代品?

type-graphql 包是否提供相同的功能?

编辑 1

我们不想要云解决方案,我们正在构建自己的服务器

我们正在寻找低级 API(首选,非必需)

0 投票
0 回答
203 浏览

apollo - Apollo Federation(网关):如何向不同的实现微服务发送不同的“密钥”?

我正在尝试用一个网关和 3 个实现微服务来组成一个联合阿波罗服务。

MS1:

MS2:

MS3:

MS1 提供nameidname应发送到 MS3 用于解析过程,id应由 MS2 用于解析过程。

这种方法适用于旧版本的 apollo-gateway / apollo-server,但在最新版本中我收到以下错误消息。

提供这样的密钥的方法也不起作用:

模式必须是什么样子才能提供所描述的用例?

0 投票
1 回答
231 浏览

graphql - How to avoid returning null in Apollo Federation GraphQL

I have two services (implemented using DGS Netflix) which I want to federate using apollo federation. First one is the user service which model looks something like this:

and each can have a product that comes from another service:

And I want to get all the users with their products, but it can happen that a user has no product.

Is there a way to avoid returning a user when its product is null?

Currently my response looks like this:

I'd like to have the same list but without the nulls in the list and without the error. Is it possible? I was thinking to add some kind of custom directive that removes the null elements but could not succeed.

0 投票
1 回答
637 浏览

node.js - Apollo Federated Gateway returns an error when trying to use a .NET Core GraphQL federated subgraph

I am trying to learn Apollo Federation, so I started by looking at their sample (https://github.com/apollographql/federation-demo). This sample repository works great, and I can add a new service as a subgraph in Node.js.

I want to add a new service as a subgraph in .NET Core as well to extend the User type defined in the sample project. I did so by created a new service using graphql-dotnet.

My schema is defined as the following:


The GraphQL Playground seems to work properly, but when I try to include the service in my gateway, I get the following error: UnhandledPromiseRejectionWarning: Error: Couldn't load service definitions for "user-service" at http://localhost:5000/graphql: Syntax Error: Expected Name, found "}".

0 投票
1 回答
786 浏览

node.js - Apollo federation 抛出错误:标记为 @external 但未在基础服务上定义

我正在使用 apollo federation 并遇到错误,当尝试制作类似于计算字段的东西时(https://www.apollographql.com/docs/federation/entities/#extending-an-entity-with-computed-fields-高级):

我有两个服务:UsersPayments. 在users服务中,我存储有关用户的payments信息,以及与用户相关的支付信息。

Users服务图:

Payments服务图:

基于parentId来自用户类型,我想通过扩展User类型来获得订阅。

0 投票
0 回答
173 浏览

graphql - 在 GraphQL 中从模式拼接迁移到联合时如何解决字段冲突?

我正在尝试迁移依赖模式拼接的现有 GraphQL 代码以改用联合。

我正在努力弄清楚如何优雅地处理与重复扩展/类型定义相关的错误。

我正在尝试遵循此存储库中的示例:https ://github.com/apollographql/federation-migration-example 。

before-migration文件夹中,项目定义了这样的模式:

这个例子和我现在的配置类似。

after-migration文件夹中,他们有这个:

有什么方法可以优雅地(没有停机时间)从一种模式迁移到另一种模式?当我尝试按照这样的示例进行操作时,我从拼接服务中得到一个错误,说"Field "Reservation.user" already exists in the schema. It cannot also be defined in this type extension."这是有道理的,因为我还没有extend type Reservation从拼接服务中删除初始值。

问题是,基于这个例子,我相信从一种模式迁移到另一种模式时必须有一些停机时间。如果首先删除初始拼接类型扩展名,这将在现有客户端尝试查询Reservation.user. 如果在添加联合式扩展之前未删除初始扩展,则会引发冲突错误。

文档https://www.apollographql.com/docs/federation/migrating-from-stitching/表明可以遵循特定步骤从拼接迁移到联合:

  1. 为您的子图添加联合支持
  2. 向注册表注册您的 GraphQL 模式
  3. 启动 Apollo Server 实例作为网关
  4. 将拼接逻辑从模式拼接网关迁移到子图
  5. 将流量从模式拼接网关转移到 Apollo Server 网关
  6. 从联合模式中删除模式拼接字段并完成迁移

我不明白如何以优雅的方式执行这些步骤。似乎第 4 步“将拼接逻辑从你的模式拼接网关迁移到你的子图”将不可避免地导致我上面提到的那种冲突。文档的编写方式似乎暗示两种方法可以同时共存(文档甚至建议拼接和联合服务器都可以托管在同一进程中)。

我考虑使用transformSchemaonTypeConflict https://www.apollographql.com/docs/apollo-server/api/graphql-tools/#transformschema但我很难理解这些可能如何适用于我的情况。文件说

的默认行为mergeSchemas是采用所有同名类型中第一个遇到的类型。

我相信这与我需要的不同,因为这指的是类型而不是“根字段”。我想知道是否可以仅在该字段不存在的FilterRootFields情况下以某种方式有条件地应用拼接类型扩展。我不确定这到底是如何工作的,我找不到基于模式数据本身有条件地过滤根字段的示例。

有没有解决这个问题的规范方法?

0 投票
0 回答
71 浏览

apollo-server - 为什么扩展类型的字段解析为null?- 阿波罗联盟

考虑 2 个服务(A 和 B)。B 扩展了在 A 中定义的类型,但还添加了一个不在 A 中的新字段。但是,A 中返回该类型的解析器不会解析 B 引入的该字段(返回null)。Apollo Docs提到 B 应该解析该字段,因为 B 引入了它,但这似乎不能正常工作,因为该字段总是解析为null.

我正在使用 TS、TypeGraphql 并且有一个类似于示例文档的配置。

类型如下所示:

服务A

服务乙

有没有人对问题可能是什么有任何建议/有任何解决方案?

0 投票
1 回答
274 浏览

graphql - 如何使用 Apollo Federation 从网关到服务的请求中获取完整的详细信息

我正在尝试在 Apollo Federation 中实现 Auth0,我能够在其单个服务中实现它(https://auth0.com/blog/developing-a-secure-api-with-nestjs-adding-authorization/#Set -Up-API-Authorization)但是如果我试图通过网关访问 API,则标头/有效负载不会传递给服务,因此它总是未经授权的。

如果 API 是通过单个服务访问的,则有效负载会被接收并从标头中正确解码并且工作正常,但如果通过网关,它不会级联到需要它的服务。

目前使用代码优先的实现。我也尝试过镜像服务中使用的模块,但它仍然不起作用。

单个服务中的示例有效负载

在网关中导入

0 投票
1 回答
404 浏览

graphql - Apollo 联合网关:在编写超图时包含本地模式

在为 Apollo Federation 的网关编写超图时,您将创建一个.yaml配置文件,其中包含到子图的路由 url。例如:https ://github.com/apollographql/supergraph-demo/blob/main/subgraphs/inventory/inventory.js

在上面的示例中,他们为每个子图启动 Apollo 服务器并组成一个超图。是否可以在不启动 Apollo 服务器且仅包含本地模式的情况下编写超图?

0 投票
0 回答
84 浏览

scala - scala 3 的卡利班联盟

scala 3 还没有 caliban.federation。我的问题是将它与 scala 3 库一起使用的正确方法是什么?现在我的 build.sbt 中有这样的依赖项:

但是当我尝试构建它时,它会出错: