初学者了解GraphQL-第一部分

115 阅读7分钟

初学者了解GraphQL-第一部分

作为开发者,我们总是热衷于学习新的东西!无论是一个新的框架还是一种新的语言,我们的好奇心都会带我们去一些地方。你可能听说过的一个术语是REST。REST是REpresentational State Transfer的缩写--一种由Roy Fielding在2000年提出的软件架构风格,有一套关于网络应用程序应该如何表现的原则。可以把它看作是一个操作指南,就像如何把一顿饭放在一起。其中一个原则是,一个端点应该只做一个CRUD动作(创建、读取、更新或删除)。同样,每个RESTful端点返回一组固定的数据。我喜欢把这看作是一种饼干式的响应,你每次都会得到相同的形状。有时你可能只需要较少的数据,而其他时候你可能需要更多的数据。这可能会导致调用额外的API来获得更多的数据的问题。我们如何才能准确地获得正确的数据量,并在一次调用下获得数据?

随着技术的发展,与REST形成鲜明对比并越来越受欢迎的一个东西就是GraphQL。但它到底是什么呢?在这篇博客中,我们将学习GraphQL是怎么回事

学习成果

  • 解释GraphQL是什么
  • 用一个比喻来加深对GraphQL的理解
  • 解释REST和GraphQL之间的区别

在你开始之前

如果你是API开发的新手,这里有一些术语供参考。否则,请继续前进。

API

什么是API?

应用编程接口(API)允许两台机器互相交谈。你可以把它想象成收银员,他把你的请求带到厨房去准备,并在准备好后给你饭吃。

为什么API很重要?

API允许多个设备,如你的笔记本电脑和手机,与同一个后台服务器对话。使用REST的API就是RESTful。

REST

什么是REST?

REST(representational state transfer)是一种关于网络应用程序应该如何表现的软件架构风格。可以把它看作是一个操作指南,就像如何把一顿饭放在一起。

为什么REST很重要?

REST提供了大量的灵活性,如处理不同类型的调用和响应。它把一个资源分解成CRUD服务,使之更容易组织每个端点应该做什么。REST的关键原则之一是客户-服务器的分离。这意味着任何发生在服务器上的问题都只与服务器有关。客户端所关心的只是根据他们对服务器的请求得到一个回应。

延迟时间

什么是延迟时间?

延迟时间是指你的请求到服务器上被处理的时间。你可以把它想象成从A点开车到B点,有时会因为交通拥堵而出现延迟。

为什么延迟时间很重要?

延迟越低,服务器处理请求的速度就越快。延迟越高,你的请求被处理的时间就越长。

响应时间

什么是响应时间?

响应时间是延迟时间和处理你的请求的时间之和。可以把它看作是你订餐后的时间。

为什么响应时间很重要?

像延迟一样,响应时间越快,用户的整体体验就越完美。响应时间越慢,用户的感觉就越不完美,他们可能会放弃你的应用程序。

什么是GraphQL?

GraphQL是一种开源的API数据查询和操作语言,由Facebook在2015年公开发布。

与REST不同,GraphQL为客户提供了灵活性,以查询的形式描述他们需要的数据结构。没有更多,也没有更少。最重要的是,这一切都是在一个端点下进行的。返回的响应将正是你所描述的内容,而不是一个曲高和寡的响应。

例如,下面提供的,我们有三个关于多伦多老鹰队的API响应,他们的冠军,和他们的球员。如果我们想查看多伦多老鹰队成立的年份,队长的名字和姓氏,以及他们最后的冠军,我们需要进行三个独立的RESTful调用。

当你进行API调用时,最理想的是在一秒钟内得到一个响应。响应时间是由延迟时间和处理时间组成的。有了三次API调用,我们就会有三次往返于服务器的过程。你可能期望所有三次调用的延迟时间都是一样的。这种情况永远不会发生。你可以把延迟想象成在交通中开车,有时很快,有时由于高峰期而很慢。如果其中一个调用是慢的,那就意味着整体的总响应时间是慢的!

幸运的是,有了GraphQL,我们可以把这三个请求结合在一起,在一次旅行中就可以得到准确的数据量!

GraphQL类比

这里有两个类比来帮助描述GraphQL与REST的比较。

类比1:汉堡

想象一下,你是一家受欢迎的汉堡店的顾客,你点了他们的双层芝士汉堡。无论你点了多少次(调用你的RESTful API),你每次都能得到那个双层奶酪汉堡的每一种成分。它将永远是相同的形状和大小(在RESTful响应中返回的内容)。 照片:amirali mirhashemian on Unsplash.

有了GraphQL,你可以 "按自己的方式",准确地描述你想要的双层奶酪汉堡的样子。我想要一个双份奶酪汉堡,少点泡菜,奶酪不融化,上面是培根,下面是炒洋葱,最后下面的面包上没有芝麻。

你的GraphQL响应的形状和大小正是你描述的那样。 照片由amirali mirhashemian在Unsplash上拍摄。

类比2:银行

你要去银行取200美元的钱。使用RESTful方式,你将无法描述你希望你的钱是怎样的。柜员(响应)总是会给你两张100美元的钞票。

RESTful响应:

两张100美元的钞票

通过使用GraphQL,你可以准确地描述你希望你的面额是怎样的。你可以要求一张100美元的钞票和五张20美元的钞票。

GraphQL 响应:

一张100美元的钞票和五张20美元的钞票

REST与GraphQL

与RESTful APIs相比,GraphQL在如何从服务器上请求数据方面提供了更多的灵活性。它比REST提供了四个主要的好处:

  1. 不再过度获取额外的数据
    使用REST APIs,会返回一组固定的数据(相同大小和形状的响应)。有时,客户端不需要所有的数据。GraphQL通过让客户只抓取他们需要的东西来解决这个问题。
  2. 不再有取不到的数据
    有时,一个客户端可能需要更多的数据。必须进行额外的调用,以获得一个端点可能没有的数据。
  3. 在前端快速的产品迭代
    灵活的结构迎合了客户。前端开发者可以进行UI的改变,而不需要要求后台开发者进行改变以迎合前端设计的变化。
  4. 更少的端点
    调用太多的端点会很快变得混乱。GraphQL的单一 "智能 "端点将所有不同类型的RESTful动作捆绑在一起。

通过利用GraphQL描述你想要回来的数据结构的原则,你不需要为一些曲高和寡的反应进行多次旅行。请阅读《初学者了解GraphQL》的第二部分,我们将在Ruby on Rails应用程序中实施GraphQL,并创建和执行查询