
使用这些基本 REST API 最佳实践构建出色的 API
我们一直在寻求改善 Rapid 开发人员体验的方法。在我们不断寻求提高开发环境的可扩展性、灵活性和性能的过程中,我们最近完成了一项具有广泛益处的重大任务:从 GraphQL Monolith 切换到 Apollo Federation。
任何经历过这种转变的人都知道,这不是一个胆小的人能做到的。但结果值得付出努力。
在这篇文章中,我们将分享一些有关 GraphQL 和 Apollo Federation 的背景信息,以及我们的体验如何,以及我们为何对这一举措感到高兴。
您可能通过开发人员的小道消息听说过 GraphQL 和 Apollo Federation,但可能并不真正了解它的组成和功能。简而言之,它是一种通过将多个 GraphQL 服务组合成单个 API 模式来构建 GraphQL API 的模式。它是一种强大的开放式架构,用于创建组合多个 GraphQL API 的超级图。
Apollo Federation 提供了一种将大型、复杂的 API 架构分解为更小、更易于管理的服务的方法,这些服务可以独立开发和维护。这意味着后端开发人员可以获得灵活性和服务隔离,而最终用户体验则保持不变:他们继续以相同的方式使用子图。
GraphQL 本身是一种 API 查询语言,由 Facebook 于 2012 年开发,并于 2015 年开源,允许用户以精细的特定级别请求数据。作为使用 GraphQL 的开发人员,您可以轻松:
因此,如果您使用 GraphQL 查询语言来处理 API,则迁移到 Apollo Federation 可以简化处理复杂 API 的工作流程。
Rapid 之前的 GraphQL 实例存在问题,原因如下。我们有一个代码库,供多个团队共享,共同开发功能 — 而且我们在部署到我们环境中的同一个工件中使用同一个代码库。
由于大约 30 名开发人员同时处理同一段代码,我们最终在部署中遇到很多冲突。
例如,如果我们的某位开发人员发布了一个包含错误的损坏代码,那么所有团队都将无法取得进一步进展。此外,如果我们尝试部署多个功能,而这些功能都包含一个损坏的代码,那么我们必须将它们全部回滚到上一个稳定的迭代版本。
而当涉及到域名所有权和标准时,我们有:
总的来说,我们的 GraphQL 实例是我们开发的瓶颈。
相比之下,Apollo 联邦鼓励一种称为“关注点分离”的设计原则,这使得不同的团队可以在一个图中处理不同的产品和功能,而不会互相干扰。我们知道 Apollo 联邦将使我们的开发人员能够处理独立的 GraphQL 服务,每个服务都有自己的架构和数据源。通过分离代码库,我们的开发人员将能够更好地进行更快的迭代并体验更无缝的工作流程。
转向阿波罗联邦是一个复杂的过程,所以我们知道需要分阶段解决。
以下是我们采取的步骤:
作为一个风险很大的大项目,这是一个巨大的团队努力。我们确保以最谨慎的态度处理开发环境的这一核心工作,我们感谢整个团队愿意参与其中。
自从转向 Apollo Federation 以来,我们的开发流程得到了极大改善。由于我们将庞大而复杂的 API 分解为更小、更易于管理的服务,我们的开发人员能够更有效地工作。一个部门的开发人员可以编写代码,而不会受到其他部门代码情况的阻碍。这对我们的全球员工尤其有帮助——与我们美国团队处于不同时区的开发人员不再需要等待美国团队有空。
这意味着我们获得了更高的可扩展性、灵活性和性能——这反过来又有助于 Rapid 更快、更高质量地向最终用户提供功能。