GraphQL:它是 REST API 的 “杀手 “嗎?
在 Parse 实现了 GraphQL 支持后,很多人向我提出了一些问题,其中一些人对 REST API 的未来感到担忧。
GraphQL 会 “杀死 “REST API 吗?
我的 REST API 方法会怎么样?我需要重写代码吗?
在本文中,我将讨论这些问题,但简短的回答是:不,你不必担心,因为 GraphQL 不会 “杀死 “REST API,你也不必担心重写你已经运行的 REST API 方法。
Contents
那么,GraphQL 到底是怎么回事呢?
大多数人都有一个误解,那就是 GraphQL 并不是来取代整个后台的。
GraphQL 不会取代后端。也不会取代前端。
GraphQL 是一种查询语言,是一种为 API 指定所需的信息的方式,也是一种从已有数据中获取信息的运行时。
它只是一种不同的方式(我认为是更好的方式),可以准确地告诉应用程序您需要知道什么,然后接收这些信息。
您不必担心已经存在并正常运行的 REST API 方法。即使您采用了 GraphQL,它们也会像现在一样继续工作。唯一需要注意的是,GraphQL 只能在 Parse 3.5.0 及更高版本上运行,因此,如果你使用的是 Parse 2.x 或更早版本,这也意味着 Parse 代码结构的改变。
因此,如果你使用的是 Parse 3.0 或更高版本,就完全不必担心。只要选择 3.5.0 以上的版本就可以了。
如果你使用的是 Parse 2.X,则需要重新编写代码。
如果我的 REST API 已经可以使用,为什么还要使用 GraphQL?
这个问题也经常出现,我认为选择 GraphQL 而不是 REST API 有几个关键优势。
从短期来看,如果您已经使用 REST API 编写了应用程序,而且它能满足您的所有需求,那么就没有必要迁移到 GraphQL 并重写代码了。
另一方面,如果您现在刚起步,或者预见到应用程序会不断发展,复杂性会增加,并希望为简化未来的维护做好准备,那么 GraphQL 确实可以为您带来很多价值。
你说价值?
是的,我说了。
GraphQL 有几个关键优势,可以简化代码开发和长期维护,甚至可以帮助你节省数据传输费用!你没看错!你没看错。
让我们逐条介绍:
-
简化代码开发
刚开始使用 GraphQL 时,您可能需要编写更多的代码。不要因此而害怕。
GraphQL 会让你的查询编写变得更简单,特别是如果你使用我们的 GraphQL 控制台的话。使用 Parse 自动创建的模式,并为所有类的查询和突变发布通用和特定方法,将为你节省大量时间。我的意思是节省很多时间。
文档?没问题。我们也会提供。而且还是自动生成的。
此外,有了 GraphQL,开发人员就可以依赖 Parse 生成的模式,这样他们就能事先知道有哪些方法可用、每个方法的参数以及可用的返回(输出)。不用再猜测或询问其他人那个方法是做什么的,需要哪些参数或返回什么。一切尽在掌握。
-
简化维护
使用 GraphQL 进行维护非常简单。由于对 API 的调用本质上是相同的,因此只需更改您传递的查询或突变,添加或删除返回值或参数就像更改查询或突变以接收或传递这些值一样简单。
您不必更改大量的调用、块或承诺。只需更改查询或突变:完成!
-
节省数据传输
在 Back4app 工作一段时间后,帮助客户优化代码以获得更快响应是很常见的事情。从我在客户代码中发现的所有问题来看,绝大多数都是由于检索了应用程序当时并不需要的数据。
在处理 REST API 甚至 Parse 框架时,一个非常常见的错误就是检索对象的全部信息,然后只使用其中的部分信息。例如
您有一个名为 Person 的类,该类有几个属性:姓名、电话、地址、社会保险号、电子邮件以及其他一些属性。
通常,使用 REST API 或 Parse Frameworks 的人会尝试查询完整的 Person 对象,检索其所有属性,然后只使用其中的一两个属性。
而使用 GraphQL 时,由于您必须准确指定需要检索的信息,开发人员就没有机会检索不必要的信息,从而大大减少了有效载荷,这也就意味着响应速度更快、数据计划消耗更少以及总体出站流量更少。这多棒啊?
试一试
要想了解 GraphQL 为您的开发流程带来的好处,最好的办法就是试一试。
以下是一些可以尝试的场景,看看它的表现如何:
-
尝试创建一个 GraphQL 查询,但不明确指定要检索的内容
您将无法这样做。它会强制要求您指定想要的内容,并且只检索这些内容。除此之外,别无其他。
如果您或您的开发人员忘记了这样做,GraphQL 不会放过他们。
缺少我正在检索的内容
就是这样!
-
尝试使用查询更改对象
不行。你想改变什么?使用正确的方法:突变。
如果你或你的开发人员使用了错误的方法,GraphQL 不会让他们继续。
改变数据的查询?不不不!
Mutation 会帮你搞定!
-
多个对象、多个查询?不是!一个查询!
只需一次查询,GraphQL 就能轻松获取多个对象的信息,从而简化开发过程,减少代码出错的可能性。
想象一下,你有一个 Person 类,而一个人可以从 Dog 类中养一只狗。您需要从这两个类中检索信息:Person 的名字和年龄,以及 Dog 的名字和品种。轻而易举:
版本控制?为什么?
版本代码太过时了。
在查询中添加新字段。旧的调用仍然有效:
这样可以
这样也可以。对旧类型的调用将继续有效。
你说的废弃字段?也很容易:
结论
GraphQL 并不是来扼杀任何东西的。它带来了一种新方法来处理旧事物。更好、更快、更易于维护、更不易出错。
当你出错时,它能让你保持正确的方向。它会告诉你什么能做,什么不能做。
有了 Parse 和自动生成的方法(包括通用方法和特定方法)以及文档,学习它将变得轻而易举。
如果你从未尝试过,那就应该试试。所有酷儿都在这么做。
如果你想了解更多关于GraphQL 与 REST 的信息,请查看我们在 Medium 上发布的文章。
GraphQL 會殺死 REST API 嗎?
這個問題的答案是「否」。你現有的 REST API 不會有任何問題。移轉到 GraphQL 後,它們也不會改變。不過有一個例外。它適用於 3.5.0 及以上的 Parse。所以,如果你使用低於 3.5.0 的 Parse,你需要做一些編碼工作。
關於 GraphQL 有哪些誤解?
以下是一些主要的誤解。
-GraphQL 並非旨在取代後端。
-它是一種工具,而非一門語言。
大家應該知道,GraphQL 是一種查詢語言,它能讓你的 API 知道你正在尋找什麼訊息,以及你將從其資料中獲取什麼資訊。
GraphQL 如何讓您的程式碼不易出錯?
剛開始使用 GraphQL 時,不必擔心需要額外寫幾行程式碼。它將使您以後的任務更加輕鬆。
GraphQL 最大的優勢在於,您只需一個查詢即可取得多個物件的資訊。您無需編寫單獨的查詢來獲取多個物件的資訊。這不僅節省您的時間,還能避免程式碼錯誤。