如何将 REST API 迁移到 GraphQL Apollo Federation

Posted

技术标签:

【中文标题】如何将 REST API 迁移到 GraphQL Apollo Federation【英文标题】:How to migrate REST APIs to GraphQL Apollo Federation 【发布时间】:2021-05-02 02:02:28 【问题描述】:

计划使用 Apollo Federation 将我的 php API 迁移到 Graphql。经过一番研究,我发现它是通过以下方式完成的:

我的问题是:

    有没有更好的方法来创建联合服务,使其不是一个单独的层(每个 REST API 1 个)?也许类似于以前的模式拼接方法,所有模式都可以放在一个地方并在最后缝合在一起(而不是每个服务的特定联合层)。

    如果这是推荐的方式,我该如何部署此基础架构?从图中,这是否意味着我有 5 个实例正在运行以涵盖所有服务?

    是否建议在一个实例中运行网关和联合服务(根据图表 - 一个实例中运行 3 台服务器)?

【问题讨论】:

【参考方案1】:

如果有帮助,请告诉我。

    当您想要打破 apollo 服务器的非联合实现的单一结构时,联合服务非常有用。它可以通过结合微服务最佳实践来设计。您可以根据服务应该负责的功能来拥有联合服务,而不是盲目地为每个休息端点提供一个联合服务。一项服务可以调用多个休息端点。这将使您能够更好地控制基础架构级别的扩展、保护和管理服务。一个例子可以像亚马逊一样简单,其中项目浏览命中将远远超过购买交易。在这种情况下,您可以拥有一个提供浏览数据的联合服务,而另一个可以管理事务。然后,您可以将一个实例扩展到多个实例以处理用户负载,并为单个处理事务提供额外的安全性。

2 和 3。是的,您需要单独部署所有组件。我建议将所有服务都放在同一个 VPC 集群中,这样您就不必担心网络层的安全性。如果服务部署在多个集群上,它将为每个请求添加处理防火墙和 https/tls,这将由于网络调用而导致不必要的延迟。虽然会以毫秒为单位,但很容易避免。

【讨论】:

谢谢。我在图中表示的 API 实际上是微服务,其中每个服务都有一个专门的团队负责。如果我在联合层结合了一些微服务,这意味着一些团队将需要管理该联合服务,这将再次开始将其变成一个整体。我希望这是有道理的? 通过微服务,我特别指的是定义的边界。所以我不确定我是否应该在联邦层有另一层组合边界以包含多个 miroservice。感谢是否有人可以对这些决策过程有所了解

以上是关于如何将 REST API 迁移到 GraphQL Apollo Federation的主要内容,如果未能解决你的问题,请参考以下文章

将 REST API 获取请求转换为 GraphQL

分分钟将 REST 转换为 GraphQL

在WePay上将API从REST迁移到gRPC

在 REST API 周围添加 graphql 包装器?

将 GraphQL Schema 公开为 REST api 的方法都有哪些?

将 2 个 REST 端点合并到单个 GraphQL 响应