根据我读到的文章,GraphQL在往返方面更具资源效率,它也可以做REST所能提供的。软件架构师&考虑到Web应用程序只是从头开始,开发人员可能决定继续使用REST而不是GraphQL?此外,这是一个连续的项目,将从Web和移动消费和openID连接是一个要求。
答案 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)
在我看来,除其他方面外,还有一个用例问题:
答案 2 :(得分:1)
可能有多种原因。我认为这是非常主观的,但对我而言,它基于:
REST是一种古老而稳定的方式。它被最多使用,并为API使用者提供了一个简单的界面。因为它很旧(绝不是坏事),大多数开发人员都知道它并且知道如何使用它。
GraphQL是镇上的新人。它确实为大多数系统节省了一些性能(往返和有效载荷),但确实改变了我们对后端的思考方式。它不是提供资源端点,而是提供数据模型的图形,让消费者决定要获取哪些数据。
至于#34;新人&#34;,GraphQL并未经过战斗测试。对大多数人来说这是新的,而且基本上没有被其他人和先行者和初创公司采用。
但同样,这是一个具有主观答案的主观问题。目前我正在使用GraphQL来启动它来测试它的耐用性,看看它是否能解决我们的需求。到目前为止,它确实到目前为止。如果您要决定使用REST或GraphQL开始一个新项目,您应该考虑您的需求以及您希望花多少钱/时间学习新知识与做您所知道的事情并更快地实现目标。 / p>