Graphql和往返。这只是一个ios app问题吗?

时间:2017-02-27 04:06:10

标签: ios rest api graphql

我正在重新审视graphql,我正在努力理解为什么保存往返行程对开发人员有利。提出要求的费用如此昂贵?我来自网络开发背景。

让我们将标准的rest api与graphql api进行比较。

我需要检索用户的个人信息以及他们的朋友列表。传统的休息api可能需要2个电话,一个用于获取个人信息,另一个用于获取朋友。

使用graphql,我可以通过一个请求获得相同的结果。

但作为前端开发人员,我希望我的页面有最短的停滞期。我想尽可能快地呈现页面的一部分,而不是等待我需要的所有信息,然后再渲染页面。

根据我的理解,graphql部分创建用于解决移动应用程序api问题。有没有关于ios应用程序的东西,它使得一次加载所有数据更有利,而不是并行请求?或者还有其他我缺少的东西?

2 个答案:

答案 0 :(得分:6)

一般来说,您控制的系统内部的网络流量(即您的后端)速度很快。向外界提出205ms(200ms网络,5ms数据)的请求可能只需要6ms(1ms网络,5ms数据)。

如果你想构建你的应用程序的屏幕,并且需要发出两个REST请求,因为第二个取决于第一个的结果,你正在看(给定这些粗略的数字)410ms来获取渲染屏幕所需的数据。

使用GraphQL(或整合数据的任何其他网关层),您可以获得略高于212毫秒的所有内容(对于GraphQL服务器延迟200毫秒,每次内部呼叫为6毫秒)。

在您可以并行提出所有请求的情况下(即,他们不依赖于其他请求中的数据),性能优势并不明显,但您会发现随着应用程序复杂性的增长,这些情况实际上非常罕见。

使用GraphQL的一般经验法则是,您的初始查询会获取足够的数据以使页面正常运行,如果有不那么重要的内容,您可以随时使用其他查询获取该内容。

除了性能优势之外,让移动设备减少网络请求在电池寿命方面也是一个巨大的胜利。网络使用很昂贵,应尽可能避免使用。

答案 1 :(得分:1)

在使用GraphQL而不是REST API之前,需要了解GraphQL相对于REST的好处

GraphQL是一种查询语言 它使用您定义的类型系统GraphQLIntGraphQLStringcustomType ...

REST

  • 多次往返 - 慢
  • 重载数据
  • 许多EndPoint

GraphQL

  • 1 Endpoint
  • 陈述句:    类型,查询,突变
  • 一次通话中所需数据的确切形状
  • 没有欠费,没有数据的过度获取
  • query == result,效果更佳