在开发客户端-服务器应用程序时,开发人员通常不得不在 GraphQL 和 REST API 之间做出选择。 选择一个而不是另一个会对应用程序的速度、可伸缩性和可维护性产生深远的影响。
多年来,Rest API 一直是许多开发人员的首选。 REST API 具有定义明确的结构,使其易于使用和理解。 因此,它使开发人员能够轻松构建复杂的应用程序。
然而,GraphQL 凭借更有效和适应性更强的查询机制成为了强有力的竞争对手。 通过使用它,开发人员可以简单地检索他们真正需要的信息。 此外,GraphQL 的数据模型支持简单的定制。
GraphQL 和 REST API 都提供了独特的优势和功能。 因此,为项目选择最好的一个将对其成功产生重大影响。 在本文中,我们将介绍 GraphQL 和 REST API、它们的特性和优点、用例以及主要区别。
什么是 GraphQL?
GraphQL 是由 Meta 开发的一种健壮的 API 查询语言。 它提供了构建 APIS 和改进 RESTful API 调用的更好方法。
借助 GraphQL,开发人员可以利用单个端点来准确获取他们想要的数据。 这使得管理数据依赖性和避免过度获取变得更加容易。 而 REST API 需要多个端点来获取各种资源。
然而,对于 GraphQL 不是什么,仍然存在一些误解。 因此,让我们通过以下几点来清除混乱:
- 它不是一种数据库语言或 ORM,而是一种查询 API 的工具
- 它不是为了取代 REST API,而是一种可以在同一项目中共存的替代方案。
- 它不是压倒性的,也不困难,因此易于学习和实施。
GraphQL 于 2015 年作为开源项目提供。从那时起,GitHub、Yelp 和 Shopify 等公司都采用了它,因为它越来越受欢迎。 由于对更有效的 API 的需求不断增加,GraphQL 正在发展成为开发人员掌握的一项关键能力。
GraphQL 是如何工作的
GraphQL 建立在一个模式之上,该模式描述了可以查询的数据种类及其关系。 通过充当客户端和服务器之间的链接,此模式确保双方都知道可以请求的数据。 此外,它还决定了数据的表示方式。
让我们考虑一个使用 GraphQL API 的博客应用程序。 API 的模式可以描述如下:
帖子和评论类型与查询类型一起在此架构中定义。 它使我们能够通过 ID 获取单个帖子。 每种类型所拥有的字段反映了可以获得的数据。
使用这个模式,我们可以使用下面的代码创建一个 GraphQL 查询来获取帖子及其评论:
此查询的结果将包括帖子的标题、正文、作者和 ID。 它还将作为与该帖子相关的任何评论的正文和作者返回。
我们可以使用 GraphQL 仅通过一次 API 调用来获取所有必需的数据,而不是向不同的端点发送多个查询。 结果,开销降低了,API 的功能得到了提升。
什么是 Rest API
REST API 是一种网站服务架构。 它支持通过 HTTP 协议在许多系统之间进行通信。 它是一组架构原则,有助于开发可扩展、高效和通用的 Web 服务。
但是,它是开发人员中的一个流行选项,因为它使用常见的 HTTP 方法,例如:
GET:此命令检索资源
POST:创建资源
PUT:改变状态或更新可以是对象、文件或块的资源
DELETE:删除资源
REST API 的基础是资源的概念,资源由独特的 URL(统一资源定位器)识别。 根据客户端的请求,每个资源可以有不同的表示,如下所示:
- JSON(JavaScript 对象表示法),
- XML(可扩展标记语言),
- 和 HTML(超文本标记语言)
RESTPful API 利用这些资源来检索数据、创建记录、更新记录或删除记录。
REST API 的工作原理
REST API 通过使用户能够向服务器提交 HTTP 请求来运行,服务器通过 URL 描述资源。 服务器处理请求后,以指定格式(JSON或XML)返回信息
例如,考虑一个允许用户访问某本书相关信息的 Web 应用程序。 使用 RESTful API,客户可以获得有关单本书或精选书籍的详细信息。
要获取特定书籍的信息,客户端使用资源 URL 提交 HTTP GET 请求。 链接可能如下:https://example.com/api/books/123。 在处理请求并找到 ID 为“123”的书后,服务器会以所选格式 (JSON) 发送响应。
同样,要获取图书列表,客户端会向服务器发送一个 HTTP GET 请求,其中包含一个 URL,例如“https://example.com/api/books”。 因此,服务器以所需的格式(例如 JSON)进行响应。
GraphQL 的特点
GraphQL 是一种通用且有效的查询语言,因为它提供了健壮的类型和分层数据检索。 以下是 GraphQL 的一些关键特性,这些特性使其受到用户的欢迎:
v
强类型:GraphQL 提供了一种模式,其中包括多种 API 可访问的数据类型,例如字段、对象和链接。 为确保合法的数据传输,此模式用于验证查询和回复。
层次结构:GraphQL 允许客户指定他们需要的精确数据。 因此,返回的冗余数据较少,从而提高了 API 的速度。
更有效:借助 GraphQL,客户可以通过一次请求获得大量资源。 它只对所有允许缓存和批处理请求的查询使用一个端点。
以客户端为中心:GraphQL 允许客户端控制获取的数据,这减少了对服务器的调用次数。
不可知论者:由于 GraphQL 独立于底层数据库和技术堆栈,因此它可以与任何后端技术集成。
内省:带有内省系统,使客户能够了解他们的可访问数据、数据类型和链接。
订阅模式:订阅模式允许用户获得实时数据更新。 客户端可以订阅某些数据的变化,并在它发生变化时得到更新。
现在您已经了解了 GraphQL 的特性,让我们来探讨一下 REST API 必须为其客户提供什么。
REST API 的特点
REST API 非常强调遵循一组标准,这些标准使 API 具有高度可访问性、适应性和可扩展性:
无状态:RESTful API 在每个请求中包含所有必要的数据。 因此,它是无状态的、可扩展的并且易于管理。
客户端-服务器架构:客户端-服务器架构,客户端从服务器请求数据并返回。 因此,前端和后端系统可以分开构建和维护。
基于资源:可访问的数据由资源表示。 对于检索或修改,每个资源都有一个特定的 URL。
CRUD 操作:REST API 通过 CRUD(创建、检索、更新和删除)操作管理资源。
一致的接口:提供统一的接口来与资源交互,简化 API 架构和维护。
Cacheable:启用缓存,减少对服务器的查询次数,提高效率。
分层结构:支持包含代理服务器的分层结构,可提高灵活性和可扩展性。
GraphQL 的好处
在了解了 GraphQL 的特性之后,让我们来探索一下让它脱颖而出的好处
更好的性能:使用 GraphQL 通过最小化通过网络发送的数据量来提高性能。
简化的 API 开发:使用单一的包含模式,API 开发变得更加容易。 因此,它简化了开发过程并减少了出错的机会。
增加灵活性:开发人员可以准确描述他们需要的数据以及数据的组织方式。 因此,它可以容纳多种客户端,例如移动和网络应用程序。
改进的开发人员体验:提供可简化 API 的创建、测试和调试的框架和工具。
更好的文档:使用自记录架构,可以更轻松地理解和使用 API。
更快的迭代:可以在不影响当前客户端的情况下对模式进行更新。 因此很容易改进 API 并向其添加新功能。
更简单的数据聚合:用户可以将来自多个 API 和来源的信息集成到单个查询中。 因此,可以使用不太复杂的后端代码使数据聚合变得更简单。
GraphQL 的好处
REST API 提供各种优势,使其成为开发人员和企业的热门选择。 下面列出了 REST API 的一些主要优点:
灵活性:XML、JSON 和 HTML 只是可与 REST API 一起使用的众多编程语言和数据格式中的几种。
可扩展性:REST API 可以处理大量的流量和数据,使其成为分布式系统的理想选择。
无状态:REST API 是无状态的,这使得开发人员可以轻松创建可以为许多客户端提供服务的 API。
增强的性能:通过缓存功能,服务器处理更少的请求,从而提高整体性能。
易于实施:通过其用户友好的 HTTP 方法很容易实施以获取、创建、更新和删除资源。
应用程序和用例:GraphQL
在构建和使用 API 时,GraphQL 提供了独特的解决方案。 当按预期使用时,它可以成为以下用例的完美工具:
创建 API
GraphQL 通常用于开发提供更快访问和检索数据方法的 API。 它可以帮助开发人员指定他们希望查询的数据的精确字段和结构,从而使 API 更轻便、更快捷。
无头内容管理系统
对于无头 CMS,GraphQL 可以用作数据层。 它提供了一种将内容与显示层分离的方法。 此外,headless cms 允许开发人员有效、灵活地检索和管理内容。
移动应用程序开发
由于移动应用程序通常包含有限的带宽,因此快速数据检索变得至关重要。 这就是 GraphQL 成为开发移动应用程序的理想工具的地方。 此外,它还使开发人员更容易实现离线支持和缓存等功能。
协作应用
GraphQL 的订阅特性对于需要用户参与和实时数据变化的应用来说是必不可少的。 因此,客户端可以订阅更新并接收来自服务器的即时传输。
微服务
在微服务架构中,服务通常需要相互通信并具有不同的数据要求。 GraphQL 通过提供单一接口从各种服务检索数据来降低这种复杂性。
电子商务
GraphQL 在检索和管理产品数据方面的多功能性和高效性可以改进电子商务网站和应用程序。 这允许动态更新产品可用性、用户特定的购买指南和特别优惠等功能。
数据科学
GraphQL 灵活而强大的数据检索和分析能力使其成为数据科学应用的可行技术。 它使开发人员可以更轻松地对来自各种来源的数据进行高级分析和建模。
社交媒体
使用 GraphQL,程序员可以查询和操作用户信息、博客文章和其他内容。 这允许对用户提要进行动态更新,并为最终用户提供更加个性化的体验。
应用程序和用例:REST API
以下是 REST API 的一些关键应用程序和用例:
流动应用程式
REST API 是为移动应用程序开发后端服务的绝佳选择。 它只是从多个来源检索数据。 例如,数据库、云存储、在线移动服务等。
网络应用
REST API 最适合创建需要从众多来源访问数据的 Web 应用程序。 它提供了一种访问和操作数据的统一方法,最大限度地降低了 Web 应用程序的复杂性。
物联网 (IoT)
您可以利用 RESTful API 将物联网 (IoT) 设备与基于云的软件连接起来。 例如,智能恒温器可以与使用 REST API 调节家庭温度的基于云的服务进行交互。
电子商务网站
为了与第三方服务进行交易和连接,电子商务网站经常使用 RESTful API。 例如,在线商店可以使用 RESTful API 从物流提供商处获取运输数据或通过支付网关接受付款。
社交媒体平台
RESTful API 在促进社交媒体网络提供有组织的数据访问能力方面发挥着至关重要的作用。 使用它,程序员可以从 Twitter、Facebook 和 LinkedIn 等网站访问用户数据,以创建定制的社交媒体管理系统或本地应用程序。
GraphQL 与 REST API
让我们快速了解一下 GraphQL 和 REST API 之间的区别:
FeatureGraphQLREST APIData Retrieval Clients can query and retrieve only the required data in various formats Clients can query and receive every data in a predefined format。 数据请求和响应可以处理复杂的数据并使用单个请求从多个源返回它。 需要对大量资源进行多次查询 数据查询灵活性 允许根据客户的特定要求定制自适应查询。查询的修改可能性相对受限。 缓存 FeatureCaching-enabled,可提高性能。 因此,无需重新处理查询。 由于预定义的返回样式,缓存可能更加困难。整体性能对高频数据检索有效。 高频数据的效率较低版本控制条件因为对模式的更新是累积的,所以不需要版本控制。 它会导致带宽浪费和延迟响应时间。学习曲线更陡峭的学习曲线,因此用户必须掌握架构和查询方法具有简化的请求和响应样式,更容易学习和使用文档大量的工具、文档和 IDE 集成有限的工具、文档和 IDE 支持工具支持程序、工具和库正在扩展完善和强大的工具和资源集
作者注
GraphQL 允许客户端在单个请求中准确获取他们需要的数据。 对于数据需求复杂或数据检索频率高的应用程序来说,这是一个很好的选择。
另一方面,REST API 提供了更强大的支持软件生态系统并且更易于使用。 它非常适合需要易用性的简单应用程序。 此外,它还包括一个完善的工具和库生态系统。
最后的想法
如您所见,GraphQL 和 REST API 的优点和缺点都有明显的区别。 一般来说,在 GraphQL 和 REST API 之间进行选择取决于开发人员的偏好和应用程序的要求。
您还可以探索一些常见的 REST API 面试问题和答案。