Apollo Client 和 Relay 有什么区别?

What are the differences between Apollo Client and Relay?

我刚刚接触了 GraphQL,我正在决定在这两个框架 (Apollo and Relay) 中选择一个来实现我的前端 React Web 应用程序。

我知道 Relay 是由 Facebook 构建的,而 Apollo 是由 Meteor 构建的。有没有人尝试过这两种方法,您的体验如何?我想知道它们之间有什么区别,以及与 Apollo 相比,哪种 GraphQL 应用程序会从使用 Relay 中获益更多。

TL;DR: 这个问题的答案归结为 "it depends"。我鼓励您尝试这两个 GraphQL 客户端并得出您自己的结论。 Learn Apollo and Learn Relay 是入门的好资源。

注意下面说的是中继 1,不是中继 2。

框架

Relay 仅适用于 React 和 RN,而 Apollo 与框架无关。当您想构建 React 应用程序时,这对您来说不是问题,但仍然值得一提。

GraphQL API

中继需要 Relay specification 中进一步描述的自定义架构。 Apollo 适用于任何 GraphQL 架构。

灵活性

中继强加了您绝对需要遵循的严格、固定的结构。另一方面,Apollo 为您提供了许多处理特定主题的不同方法和选择。

生产力

Relay 提供了出色的开发人员体验,但入门门槛很高。 Apollo 需要更多的手动工作才能完成工作。

难度[​​=33=]

Relay 引入了许多新概念,例如节点、边缘和连接,并且重申一下,具有很高的进入门槛。相比之下,Apollo 非常容易上手。

订阅

除了一些社区努力使订阅与 Relay 一起工作之外,对于 Relay 中的订阅并没有真正达成共识。另一方面,例如,Apollo 与 subscriptions-transport-ws that already finds great adoption in the community. Here's a worldchat app using GraphQL subscriptions 很好地集成。

架构检查

中继需要 a schema check using Babel on build-time。 Apollo 为此提供了可选工具。