如何从 Apollo 服务器进行 GraphQL 查询和变更?

How can one make GraphQL queries and mutations _from_ Apollo Server?

我们有一个大型项目,其中包含大量不同的数据 sources/microservices——其中一些是 REST API,一些是 GraphQL。我们想在这些数据源和我们的最终客户端之间建立一个中间层,这将是 NextJS/React/Apollo 客户端。 Apollo Server 似乎是一个不错的选择——从不同的数据 sources/microservices 接收数据,并制作一个统一的 GraphQL API 供 Apollo Client 前端使用。同样,当我们需要从前端获取 post 数据时,提供一个 GraphQL 接口,它将 post REST API 或 GraphQL 提供给数据源。

我遇到的一件事是当原始数据 source/microservice 有GraphQL API。我查看了 Apollo Server documentation 以获取数据,但没有看到我要找的东西 -- 可能我没找到它。

如果 Apollo Server 不提供 API 来实际获取 GraphQL 数据,那该怎么办?在 Apollo 服务器中使用 Apollo 客户端?

我确信我错过了非常明显的东西,非常感谢任何线索!

听起来你有点想多了。您可以只在中间层使用 Apollo Client 来为 Apollo Server 的解析器提供支持。除此之外,GraphQL 服务器应该以查询作为主体响应常规 POST - 你甚至可以为此使用 fetch

我认为您正在寻找 GraphQL 网关服务器。

检查这些链接 -

https://www.apollographql.com/docs/apollo-server/federation/implementing/

https://www.apollographql.com/docs/apollo-server/features/schema-delegation/#example

Edit

案例 1 - 如果您有用 Graphql 编写的微服务,那么使用 apollo 网关服务器,您可以将来自所有其他微服务的所有架构拼接成一个可供客户端使用的单一架构。它易于设置和管理。即使将来您想将 Graphql 后端拼接成一个模式,也可以通过最少的更改轻松扩展和管理。

案例 2 - 如果这些微服务是第三方的并且您不想将这些模式合并为一个,那么您可以使用 Apollo 服务器(没有网关)并编写一个包装器解析器来进行外部调用。

您可以简单地使用 fetch API 从您的解析器进行网络调用。创建 Rest 请求很容易,但是 创建复杂的 Graphql 请求(使用片段)可能很困难 fetch 的情况。

休息电话 - 您可以使用 Apollo RestDataScource 进行外部休息电话。它还支持apollo服务器缓存。

对于 Graphql 调用 - 您可以使用 GraphqlDataSource 或像这样实现您自己的调用。