我们有一个大型项目,其中将包含大量不同的数据源/微服务-其中一些将是REST API,一些将是GraphQL。我们希望在这些数据源和最终客户端之间建立一个中间层,即NextJS / React / Apollo客户端。为此,Apollo服务器似乎是一个不错的选择-从不同的数据源/微服务接收数据,并创建统一的GraphQL API,供Apollo客户端前端使用。同样,当我们需要从前端发布数据时,请提供一个GraphQL接口,该接口将REST API或GraphQL都发布到数据源。
我遇到的一件事是了解当原始数据源/微服务具有GraphQL API时,如何从Apollo Server获取和发布数据。我翻阅了Apollo Server documentation来获取数据,却没有看到我想要的东西-也许我错过了。
如果Apollo Server不提供实际获取GraphQL数据的API,该怎么办?在Apollo服务器中使用Apollo客户端?
我确定我想念的是显而易见的东西,并且会感谢任何线索!
答案 0 :(得分:1)
听起来您好像在想什么。您可以只在中间层中使用Apollo客户端为Apollo服务器的解析器供电。简而言之,GraphQL服务器应该以查询为主体来响应常规POST-您甚至可以使用fetch
。
答案 1 :(得分:1)
我认为您正在寻找GraphQL网关服务器。
检查这些链接-
https://www.apollographql.com/docs/apollo-server/federation/implementing/
https://www.apollographql.com/docs/apollo-server/features/schema-delegation/#example
编辑
案例1-如果您具有用Graphql编写的微服务,那么使用apollo网关服务器,您可以将所有其他微服务中的所有架构缝合到一个可由客户端使用的单一架构中。易于设置和管理。即使将来您希望将Graphql后端缝合到一个架构中,也可以通过最少的更改轻松进行扩展和管理。
案例2-如果这些微服务是第三方,并且您不想将这些架构合并为一个,则可以使用Apollo服务器(不带网关)并编写一个包装解析器来进行外部调用。
您只需使用fetch API
即可从您的解析器拨打网络电话。创建Rest请求很容易,但是
创建复杂的Graphql请求(使用片段)可能会很困难
的情况下。
对于休息电话-您可以使用Apollo RestDataScource进行外部休息电话。它还支持apollo服务器缓存。
对于Graphql调用-您可以使用GraphqlDataSource或这样实现自己的代码。