REST是构建API的一种流行方法,而且比GraphQL应用更广泛,让我们看看GraphQL和REST的区别。

Rest是一个概念

REST是一个事实上的架构标准,但它实际上没有规范,有大量的非官方定义。GraphQL有一个规范草案,它是一种查询语言,而不是一个架构,有一套围绕它的定义良好的工具(和一个繁荣的生态系统)。

REST是建立在现有的架构之上的,如HTTP,而GraphQL则是建立自己的一套规则。这可能是一个优势点,也可能不是,因为REST可以使用HTTP层上的缓存。GraphQL必须在系统中建立自己的缓存。

单一的端点

GraphQL只有一个端点,你在那里发送你的所有查询。通过REST方法,你创建了多个端点,并使用HTTP动词来区分读取动作(GET)和写入动作(POST、PUT、DELETE)。GraphQL不使用HTTP动词来确定请求类型。

根据您的需求定制

使用REST,您通常无法选择服务器返回给您的内容,除非服务器实现部分响应稀疏字段集,并且客户端使用该功能。 API维护人员无法强制执行此类过滤。

API通常会返回比你需要的多得多的信息,除非你也负责API服务,并为每个不同的请求定制响应。

在GraphQL中,情况就不同了:你向一个端点发出一个请求,只取回你需要的东西。

它避免了服务端大量冗余数据的返回,查询速度更快,更灵活。

下面我们来看一个Pizza endpoint的例子。

如果你调用GET /pizza/margherita,你将得到一个Margherita比萨。如果你调用GET /pizza/napoli,你将得到一份Napoli比萨。

如果你有30种不同的口味,你就会有30个端点(除非你把比萨饼的名字作为参数传给GET /pizza)

但也许你想要一种特定的比萨,这很容易向服务员描述,但很难向REST endpoint表达。

一个GraphQL端点可以让你调用/pizza,描述你要求的特定成分,以建立你想要的完美比萨。

GraphQL使监测字段的使用变得容易

在REST中,通常没有办法确定一个字段是否被客户端所需要,所以当涉及到重构或废弃时,不可能确定实际的使用情况。

GraphQL可以知道哪些字段被客户使用。

访问嵌套的数据资源

GraphQL产生更少的网络请求。

举个例子。访问一个人的所有朋友的姓名。如果你的REST API暴露了一个端点/person/1/friends,返回一个人朋友的信息列表,你首先通过GET /person/1得到/person/1,然后GET /person/1/friends。

除非一个人的朋友列表已经包含了朋友的名字,否则如果有100个朋友,你就需要向/person端点做101次HTTP请求,这是一个巨大的时间和资源的浪费。

使用GraphQL,你只需要一个请求,即询问一个人的朋友的名字。

类型

API是基于JSON的,不能提供类型控制。GraphQL有一个类型系统。

哪一个更好?

现在,全世界的开发者正试图找出从REST迁移到GraphQL是否适合他们的需求。

当你需要公开复杂的数据表示时,客户可能只需要数据的一个子集,或者他们经常执行嵌套查询以获得他们需要的数据时,GraphQL是一个完美的选择。

与编程语言一样,没有单一的赢家,这完全取决于你的需求。

另外,我想说的是:你可以同时使用。

你可以根据你的需要混合和使用REST和GraphQL,有时这是最好的做法。

 

版权声明:本文为kfer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kfer/p/15160862.html