REST比GraphQL更适合的项目?

时间:2016-11-18 06:56:25

标签: rest web-applications architecture graphql

根据我读到的文章,GraphQL在往返方面更具资源效率,它也可以做REST所能提供的。软件架构师&考虑到Web应用程序只是从头开始,开发人员可能决定继续使用REST而不是GraphQL?此外,这是一个连续的项目,将从Web和移动消费和openID连接是一个要求。

3 个答案:

答案 0 :(得分:4)

这是一个相当广泛的问题,但我会根据自己的经验尝试回答。

REST提供对特定资源的访问,例如用户或产品。请求的结果可能是假设您想要或使用哪些数据,即它可能是关于该资源的所有内容,无论您是否使用所有数据。

还存在N + 1的问题。作为一个例子,拿用户拥有并属于许多关系场景;使用RESTful API,您可以向用户发出请求,例如/users/:id然后向他们所有的关系提出请求,例如/users/:id/relationships,已经有两个请求了。可能存在关系端点的假设,以在结果数组中包含关系(朋友,家庭成员等)和用户,但是如果API没有这样做< em>假设,您将不得不向每个用户端点发出请求,以获取每个关系中每个用户的数据。

这个例子也可以更深入;如果你想要所有第二层关系(例如朋友的朋友)怎么办?

GraphQL通过允许您具体询问您的需求来解决这个问题。您可以构造一个查询以深度返回数据:

query myQuery($userId: ID!) {
  user(id: $userID) {
    id
    name
    relationships {
      id
      type
      user {
        id
        name
        relationships {
          id
          type
          user {
            id
            name
          }
        }
      }
    }
  }
}

碎片可以清理一下这可能会有递归问题,但你应该明白这个想法;一个请求可以获得所需的所有嵌套数据。

如果您不太需要这种嵌套或相互关联的结果集,GraphQL可能无法在利益和复杂性之间进行大量交易。

然而,我在GraphQL中发现的最大好处之一是它的可扩展性和自我记录。

答案 1 :(得分:4)

在我看来,除其他方面外,还有一个用例问题:

  • 如果你的应用程序或其他前端的连接速度很慢和/或具有高延迟(典型的例子:移动应用程序),GraphQL的“往返最小化”可能是一个很大的优势。对客户端控制数据结构非常方便,因此通常会减少所需API端点的数量。
  • 如果它是服务器之间的数据交换,RESTful API与HTTP密切相关的事实具有诸如动词的语义(GraphQL无法提供,当您使用一个GraphQL查询执行多个操作)和状态代码时的优点。另外:您可以免费获得所有HTTP缓存功能,这在大量数据驱动的应用程序/服务中非常重要。此外,REST无处不在(虽然大多数宣传为“RESTful”的API都不是,通常是由于缺少对超媒体的支持)。

答案 2 :(得分:1)

可能有多种原因。我认为这是非常主观的,但对我而言,它基于:

REST是一种古老而稳定的方式。它被最多使用,并为API使用者提供了一个简单的界面。因为它很旧(绝不是坏事),大多数开发人员都知道它并且知道如何使用它。

GraphQL是镇上的新人。它确实为大多数系统节省了一些性能(往返和有效载荷),但确实改变了我们对后端的思考方式。它不是提供资源端点,而是提供数据模型的图形,让消费者决定要获取哪些数据。

至于#34;新人&#34;,GraphQL并未经过战斗测试。对大多数人来说这是新的,而且基本上没有被其他人和先行者和初创公司采用。

但同样,这是一个具有主观答案的主观问题。目前我正在使用GraphQL来启动它来测试它的耐用性,看看它是否能解决我们的需求。到目前为止,它确实到目前为止。如果您要决定使用REST或GraphQL开始一个新项目,您应该考虑您的需求以及您希望花多少钱/时间学习新知识与做您所知道的事情并更快地实现目标。 / p>