GraphQL API与REST API

REST和GraphQL之间的主要区别以及何时最佳使用一个与另一个

自从休息是构建API的一种流行方法,并且比GraphQL,可以假设您熟悉它,因此,让我们看一下GraphQL和REST之间的区别。

休息是一个概念

REST是事实上的体系结构标准,但实际上它没有任何规范和大量的非正式定义。 GraphQL有一个规格草稿,这是一个查询语言而不是架构,而是围绕它构建了一套定义明确的工具(以及蓬勃发展的生态系统)。

尽管REST建立在现有架构之上,但在最常见的情况下是HTTP另一方面,GraphQL正在建立自己的约定集。 REST可以带来好处,这可以成为一个优势点,也可以不是。免费通过在HTTP层上进行缓存。

单一端点

GraphQL只有一个端点,您可以在其中发送所有查询。通过REST方法,您可以创建多个端点并使用HTTP动词区分阅读动作(GET)并编写动作(POSTPUTDELETE)。 GraphQL不使用HTTP动词来确定请求类型。

根据您的需求量身定制

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

API通常会向您返回比您需要的信息更多的信息,除非您也控制API服务器,并且针对每个不同的请求量身定制响应。

使用GraphQL,您可以显式地仅请求所需的信息,而不必从完整的响应默认值中“退出”,但是必须选择所需的字段。

这有助于节省服务器上的资源,因为您最有可能需要较少的处理,并且由于要传输的有效负载较小,因此还可以节省网络。

可视化的一种好方法是一个示例披萨终点(我是意大利人,以比萨饼为例很完美)。

如果你打电话GET /pizza/margherita,您会得到一个玛格丽塔披萨。如果你打电话GET /pizza/napoli,您将获得那不勒斯披萨。

如果您有30种不同的口味,则将有30个端点(除非您将披萨名称作为参数传递给GET /pizza, 例如)

但是,也许您想要一种特定的披萨,但是如果没有一种食材,您就不会喜欢。向服务员问这个很容易,但是很难表达给REST端点。

GraphQL端点会让您打电话/pizza,然后您需要特定的原料来制作您想要的完美披萨。

GraphQL使其易于监视字段使用情况

使用REST通常无法确定客户端是否需要某个字段,因此在进行重构或弃用时,无法确定实际使用情况。

GraphQL使得可以跟踪客户端使用哪些字段。

访问嵌套的数据资源

GraphQL允许生成更少的网络调用。

让我们做一个例子:您需要访问一个人的朋友的名字。如果您的REST API公开了/person端点,该端点返回带有好友列表的人员对象,通常您首先会通过以下方法获取人员信息GET /person/1,其中包含其朋友的ID列表。

除非某人的朋友列表中已经包含朋友名称,否则您需要对100个朋友进行101个HTTP请求,/person端点,这是巨大的时间成本,也是一种资源密集型操作。

使用GraphQL,您只需要一个请求,即可请求一个人的朋友的名字。

种类

REST API基于无法提供类型控制的JSON。GraphQL具有类型系统

哪一个更好?

世界各地的组织都在质疑他们的API技术选择,他们试图找出从REST迁移到GraphQL是否最适合他们的需求。

当您需要公开复杂的数据表示形式,或者客户端可能只需要数据的一部分,或者客户端定期执行嵌套查询以获取所需的数据时,GraphQL就是一个完美的选择。

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

另外,我想指出一点:您可以同时使用两者。

您可以根据需要混合和匹配REST和GraphQL,有时这是最好的选择。


更多graphql教程: