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

如何从Apollo服务器进行GraphQL查询和变异?,graphql,react-apollo,apollo-client,apollo-server,Graphql,React Apollo,Apollo Client,Apollo Server,我们有一个大型项目,其中将有大量不同的数据源/微服务——其中一些是RESTAPI,一些是GraphQL。我们希望在这些数据源和最终客户机(即NextJS/React/Apollo客户机)之间建立一个中间层。Apollo Server似乎是一个很好的选择—从不同的数据源/微服务接收数据,并制作Apollo客户端前端将使用的统一GraphQL API。类似地,当我们需要从前端发布数据时,提供一个GraphQL接口,该接口将向数据源发布restapi或GraphQL 我遇到的一个问题是,当原始数据源/

我们有一个大型项目,其中将有大量不同的数据源/微服务——其中一些是RESTAPI,一些是GraphQL。我们希望在这些数据源和最终客户机(即NextJS/React/Apollo客户机)之间建立一个中间层。Apollo Server似乎是一个很好的选择—从不同的数据源/微服务接收数据,并制作Apollo客户端前端将使用的统一GraphQL API。类似地,当我们需要从前端发布数据时,提供一个GraphQL接口,该接口将向数据源发布restapi或GraphQL

我遇到的一个问题是,当原始数据源/微服务具有GraphQLAPI时,理解如何从Apollo服务器获取和发布数据。我查看了整个数据库以获取数据,但没有看到我要查找的内容—可能是我遗漏了它

如果Apollo服务器不提供实际获取GraphQL数据的API,人们会怎么做?在Apollo服务器中使用Apollo客户端


我肯定我错过了显而易见的东西,如果有任何线索我都会感激的

听起来你有点想太多了。您可以在中间层中使用Apollo客户端为Apollo服务器的解析程序供电。除此之外,GraphQL服务器应该以查询作为主体来响应常规帖子,您甚至可以使用fetch来实现这一点。

听起来您有点想得太多了。您可以在中间层中使用Apollo客户端为Apollo服务器的解析程序供电。除此之外,GraphQL服务器应该以查询作为主体来响应常规帖子,您甚至可以使用fetch来实现这一点。

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

检查这些链接-

编辑

案例1-如果您有用Graphql编写的微服务,那么使用apollo网关服务器,您可以将所有其他微服务中的所有模式缝合到一个单一模式中,该模式可供客户端使用。它易于设置和管理。即使将来您希望将Graphql后端缝合到一个模式中,也可以轻松地进行扩展和管理,只需进行最小的更改

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

您可以简单地使用fetchapi从解析程序进行网络调用。创建Rest请求很容易,但是 使用片段创建复杂的Graphql请求在中可能很困难 提货箱

对于rest调用-您可以使用Apollo进行外部rest调用。它还支持apollo服务器缓存


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

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

检查这些链接-

编辑

案例1-如果您有用Graphql编写的微服务,那么使用apollo网关服务器,您可以将所有其他微服务中的所有模式缝合到一个单一模式中,该模式可供客户端使用。它易于设置和管理。即使将来您希望将Graphql后端缝合到一个模式中,也可以轻松地进行扩展和管理,只需进行最小的更改

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

您可以简单地使用fetchapi从解析程序进行网络调用。创建Rest请求很容易,但是 使用片段创建复杂的Graphql请求在中可能很困难 提货箱

对于rest调用-您可以使用Apollo进行外部rest调用。它还支持apollo服务器缓存


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

@我正在浏览您链接的文档,我得到的印象是,这些调用被认为是用于我们自己创建的系统之间的接口,而不是用作外部后端之间的接口-可能是Graphql,但也可以是REST——在本例中,我们的GraphQL层是我们的前端。来自@ZachChilders的答案是否更适合我们的用例?Apollo gateway和federation看起来很酷,但我想知道它们在这里是否有用。我刚刚找到GraphqlDataSource-它是否得到维护?最近的几次犯罪似乎已经快一年了。阿波罗没有自己的GraphQL数据源,这太糟糕了。简单地将Apollo客户端加载到服务器并使用它会有什么问题吗?或者这真的只是在React应用程序中使用吗?我不确定GraphqlDataSource的维护。Apollo团队为datasource提供了支持,并将其注入graphql上下文。由社区根据自己的意愿建立图书馆
o他们的需要。Apollo客户端主要用于客户端。您可以简单地使用apolo链接和fetch来进行GraphqlDataSource中使用的graphql调用。你不需要整个apollo客户端包,GraphqlDataSource在我看来很不错。您还可以使用@I正在浏览您链接到的文档来实现自己的数据源-我得到的印象是,这些文档被认为是用于我们自己创建的系统之间的接口,而不是作为外部后端之间的接口-可能是GraphQL,但也可以是REST——在本例中,我们的GraphQL层是我们的前端。来自@ZachChilders的答案是否更适合我们的用例?Apollo gateway和federation看起来很酷,但我想知道它们在这里是否有用。我刚刚找到GraphqlDataSource-它是否得到维护?最近的几次犯罪似乎已经快一年了。阿波罗没有自己的GraphQL数据源,这太糟糕了。简单地将Apollo客户端加载到服务器并使用它会有什么问题吗?或者这真的只是在React应用程序中使用吗?我不确定GraphqlDataSource的维护。Apollo团队为datasource提供了支持,并将其注入graphql上下文。由社区根据需要建立lib。Apollo客户端主要用于客户端。您可以简单地使用apolo链接和fetch来进行GraphqlDataSource中使用的graphql调用。你不需要整个apollo客户端包,GraphqlDataSource在我看来很不错。您还可以使用它实现自己的数据源