Graphql 是不是比 Rest API 提供任何性能提升?

Posted

技术标签:

【中文标题】Graphql 是不是比 Rest API 提供任何性能提升?【英文标题】:Does Graphql offer any performance increase over Rest API?Graphql 是否比 Rest API 提供任何性能提升? 【发布时间】:2019-12-05 12:50:55 【问题描述】:

在了解了 Graphql 之后,我了解到它比 Rest API 有很多优点,其中最常提到的就是方便。

但是 Graphql 与 Rest API 相比实际上是否提供了任何性能提升?

【问题讨论】:

【参考方案1】:

这是一个非常笼统的问题,因此一般的答案 - 视情况而定。

这取决于您的用例,如果您有嵌套对象需要在像@RAVI_SINGH 这样的“标准”REST 架构中进行多次调用,那么答案是肯定的,graphql 可以减少调用次数,从而提高性能。但这真的取决于您的用例。

另一方面,如果您没有这样的情况,并且不需要 graphql 提供的“客户端电源”功能,那么在进行所有选择集计算时,您确实需要付出一些性能上的代价.

就像几乎所有东西一样,graphql 有好有坏,它可以提高或不提高性能,这取决于你的模型以及你如何实现和使用它

【讨论】:

值得注意的是,REST 端点可以(并且通常)被设计为包含许多使 GraphQL 性能更高的特性(例如,能够在单个端点中包含或“扩展”相关资源)要求)。而且,除了开销之外,还可以设计一个性能极好的 GraphQL 服务器。【参考方案2】:

是的,当然。如果你只是用谷歌搜索 GraphQL vs. REST,你会得到很多答案,但我会举一个例子来解释一切。

假设您想从具有单独端点的 REST 服务器获取一些书籍的详细信息及其各自的评论 - 例如,/books/reviews

REST:如果您要直接调用 REST 服务器,那么首先您必须调用以获取所有图书详细信息,然后针对每本书的 ID 进行调用以从/reviews 端点。这样一来,您最终会进行 n+1 次调用。 GraphQL:如果您使用 GraphQL 作为中间服务器,您只需编写一个 查询 即可为您完成所有工作。这意味着您的 GraphQL 服务器将理解查询,并且仅在一次查询中,它会首先获取所有图书详细信息,然后获取每本书的评论。

使用 Data Loader,您可以进一步优化 GraphQL 服务器。

请参阅this link 了解更多信息。

【讨论】:

以上是关于Graphql 是不是比 Rest API 提供任何性能提升?的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 不适用于公共 API

GraphQL 如何比 REST 更高效?

从 .NET Core 应用程序同时提供 REST 和 GraphQL API

GraphQL 是不是具有与 REST 相同的缓存能力

如何将 REST API 迁移到 GraphQL Apollo Federation

GraphQL 或 REST [关闭]