问题标签 [apollo-gateway]

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 投票
1 回答
484 浏览

graphql - 如何将 Apollo-Gateway 与 swagger-to-graphql 工具一起使用?

我正在通过swagger-to-graphqlnpm 模块使用 Swagger Petstore,并且能够为其运行 GraphQL Playground。

但是,当我尝试将服务提供给 Apollo Gateway 时,它会抛出Error: Apollo Server requires either an existing schema or typeDefs

我错过了什么?

0 投票
1 回答
575 浏览

typescript - 带有打字稿的 Apollo 网关不会在上下文中接受用户 ID

我一直在尝试使用 typescript 实现 Apollo 的新网关。但是我一直遇到一个我似乎无法解决的打字稿问题。错误消息是“类型 'TContext'.ts(2339) 上不存在属性 'userId'”。注意我正在尝试在 AWS Lambda 上实施。

据我所知,通过查看包源代码 TContext = Record 是一个对象,但它似乎没有解决。

下面的编辑 更新似乎会导致同样的问题。

0 投票
0 回答
1612 浏览

node.js - 使用 Apollo 网关的身份验证服务

我正在使用 Apollo Gateway 开发基于微服务的应用程序。每个服务都是用 Node.js 编写的,并使用 Graphql 来构建一个联合模式。我还使用 Mongoose 与服务之间共享的 MongoDB 数据库进行交互。开发这个应用程序的主要目标是学习和获得使用对我来说新的工具和技术的经验,如 Graphql、微服务和 Node.js。

我有一个关于身份验证的问题。我决定为每个用户使用基于 JWT 的身份验证和额外的数据库存储会话。通过这种方式,我可以监控每个用户的活动会话,并通过禁用与​​令牌关联的会话来撤销访问。所有这些都由 Auth 服务管理,该服务负责验证、创建新用户和登录/注销功能。Auth 服务公开一个 REST 端点来验证 jwt 令牌,如下所示。

我的 API 网关基于 Apollo 网关来构建联合模式。身份验证由 Auth 服务验证,并通过网关设置的请求标头与所有其他服务共享。

这样,流程如下:

  • API 网关接收来自客户端的 Graphql 查询请求。
  • API 网关使用 auth 服务提供的唯一 REST 端点查询 Auth 服务以对用户进行身份验证(从收到的请求中复制令牌 cookie)。
  • 身份验证服务对用户进行身份验证并发送回数据。
  • 网关接收响应,创建额外的请求标头并继续管理原始 Graphql 查询。

这伴随着网关在管理来自客户端的每个 Graphql 查询之前进行的额外调用的成本。我想知道这是否是一个可行的选择,或者我的推理存在一些重大缺陷。

0 投票
1 回答
1306 浏览

java - GraphQL Apollo Federation-JVM 中 @extends 类型的解析器问题

我对 Apollo Federation 和 Gateway 很陌生,并尝试将apollo federation-jvm用于演示项目。我使用联合 jvm 创建了两个联合服务。这两项服务都通过 Apollo Gateway 相互连接。使用他们官方 github 页面中的这个节点网关示例。

以下是这些服务的架构和解析器:

联合服务 1:

视频.graphql

video.graphql 的解析器

联合服务2:

名称.graphql

name.graphql 的解析器

我可以通过网关在两种服务的类型查询中调用所有 API(topVideo、allVideos、getByNameId、getAllNames),没有任何问题。

但是,当我通过将以下内容添加到 video.graphql 架构来扩展视频类型架构中的名称类型时

我不确定如何为getVideoByNameId字段编写解析器。

我尝试将方法 getVideoByNameId(String nameId)添加到 VideoQuery.java (从 getVideoByNameId 方法返回硬编码视频对象),但图表始终返回 null。

我还尝试使用下面的代码创建 RuntimeWiring,然后在创建 GraphQLSchema 对象时传递它,如他们github 页面上的示例所示

似乎没有任何效果。非常感谢任何帮助。

0 投票
0 回答
969 浏览

graphql-java - 将我的 spring Boot Graphql 连接到 Apollo Gateway

我正在尝试使用 Spring Boot 开发将公开 GraphQL 的微服务,并将它们全部连接到 Apollo Gateway,但出现以下错误:

UnhandledPromiseRejectionWarning:错误:Apollo 服务器需要现有的模式、模块或 typeDefs

这是我附上的代码

客户端解析器

客户端架构

网关.js

错误信息

在 Java 控制台中我有这个消息

有什么想法吗?

0 投票
0 回答
229 浏览

graphql - Apollo Federation:如何通过解析器跨联合服务访问 Input Request 中的数据

寻找使用 Apollo federation 加入 graphQL API 响应的选项,其中 Graphql API 构建在 POST 服务之上。

为了解释我的用例,我创建了下面的虚拟示例。

两个 POST 服务是

  1. 用户服务和
  2. 邮政服务

请求用户服务

来自用户服务的响应

要求邮政服务

Post Service 需要来自 UserService Response 的 PostIds 以及来自 Gateway Input(来自客户端的输入)的 memberInfo 和 GroupInfo。

在我当前的解析器中,除了 postId,我没有任何信息,

如何编写解析器,其中两个响应需要使用 postId 连接但需要来自客户端输入的额外信息?

或者换句话说 - 如何通过解析器跨联合服务访问来自 Input Request 的数据


添加以回答评论中的问题之一

---------------------------------------- 用户架构 -------------------- --------

// 这里Id(postId)应该是主键,但是服务也需要其他输入,包括MemberInfo和GroupInfo。我不知道该怎么做,这是我需要帮助以及解析器的地方

-----------------------------后架构 -------------------- ------

0 投票
1 回答
382 浏览

apollo-server - 如何使用 Apollo Gateway 实现异步突变

使用 Apollo Gateway 时,Gateway 会将突变直接转发到相关的实现服务。此类请求是同步的。

有没有一种方法可以让 Apollo Gateway 将所有突变发布到像 rabbitmq 这样的消息代理,以便我们可以在网关和实现服务之间实现异步通信?

0 投票
1 回答
268 浏览

graphql - 使用 Apollo Federated GraphQL,有没有办法对来自外部实体的值进行排序/分页?

是否可以将查询输入中的字段标记为需要由不同服务扩展的字段?

使用federation-demo来说明我的问题,但要保持简单一点。只有一个帐户服务和一个评论服务,并向karma用户添加一个字段,是否可以根据用户业力过滤评论。

帐户服务,向用户添加 karma int:

评论服务,添加评论查询:

在我的 Query.reviews 解析器中,我想过滤掉所有 review.author.karma 小于指定 minKarma 的评论。

我如何告诉网关,当在查询输入中指定 minKarma 时,我希望首先查询 Account 服务,并将用户的表示传递到 Review 服务,每个用户的业力附加到评论作为作者,这样我可以做过滤器?

回到这篇文章顶部的问题,我可以将该minKarma字段标记为需要User.karma吗?

0 投票
1 回答
17 浏览

apollo-server - 使用 Key 启动网关以验证配置,然后使用 Bearer 令牌进行查询

我有一个网关和联合服务存在的生态系统。问题是当网关启动时,它会验证服务——为此它需要获得授权。

当客户端通过联合网关查询时,它们会提供不记名令牌。

在这两种情况下,都使用请求标头授权字段。

我已经阅读并重新阅读了文档,但我无法使用不同的令牌来实现这一点。

任何人有任何想法或相关文档的链接?干杯

0 投票
1 回答
351 浏览

microservices - 当 Apollo 网关出现故障时,如何制定定时和重试策略?

Apollo 网关模块需要一个GraphQL要连接的服务器列表。如果这些服务中的任何一个未能向 Apollo 网关响应成功代码,则整个网关将以失败状态退出。

当网关出现故障时,应该有一个重试策略。Apollo 网关初始化,以便在失败时由重试函数管理。

我怎样才能做到这一点?