GraphQL vs. REST API:使用哪个以及何时使用
在开发客户端-服务器应用程序时,开发人员通常需要在graphql和rest api之间进行选择。选择一种而不是另一种可能对应用程序的速度、可扩展性和可维护性产生深远影响。
多年来,rest api一直是许多开发人员首选的选项。rest api具有明确定义的结构,简单易用易懂。因此,它使开发人员能够轻松构建复杂的应用程序。
然而,graphql已经成为一种更有效和适应性更强的查询机制的强大竞争对手。通过使用graphql,开发人员可以简单地检索他们真正需要的信息。此外,graphql的数据模型使得简单定制成为可能。
graphql和rest api都提供了独特的优势和功能。因此,为项目选择最佳的api将对其成功产生重大影响。在本文中,我们将介绍graphql和rest api的特点和优势、用例以及主要区别。
什么是graphql?
graphql是由meta开发的强大的api查询语言。它提供了一种更好的构建api和改进restful api调用的方式。
通过graphql,开发人员可以使用一个端点获得他们想要的数据。这使得管理数据依赖关系和避免过度获取变得更容易。而rest api则需要多个端点获取各种资源。
然而,对于graphql的一些误解仍然存在。因此,让我们通过以下几点澄清:
- 它不是数据库语言或orm,而是查询api的工具
- 它不是用来取代rest api的,而是可以在同一个项目中共存的替代方案
- 它不是令人不知所措、难以理解,它易学易用易实施
graphql于2015年作为开源项目发布。自那时以来,github、yelp和shopify等公司都采用了它,并且随着其受欢迎程度的增长,graphql正逐渐成为开发人员必须掌握的重要能力,以满足对更有效api的不断增长的需求。
graphql的工作原理
graphql建立在描述可以查询的数据类型以及它们之间关系的模式上。通过充当客户端和服务器之间的链接,该模式确保双方了解可以请求的数据,并确定数据的表示方式。
让我们考虑一个使用graphql api的博客应用程序。该api的模式可以描述如下:
此模式定义了帖子和评论类型,以及一个查询类型。它使我们能够通过id获取单个帖子。每个类型拥有的字段反映了可以获取的数据。
使用此模式,我们可以使用下面的代码创建一个graphql查询来获取帖子及其评论:
此查询的结果将包括帖子的标题、内容、作者和id。它还将返回与该帖子相关的任何评论的内容和作者。
与发送多个请求到不同的端点相比,我们可以使用graphql通过一次api调用获取所有所需的数据。因此,开销减少,api的功能性提升。
什么是rest api
rest api是一种网站服务架构。它通过http协议在多个系统之间实现通信。它是一组有助于开发可扩展、高效和多功能的网络服务的架构原则。
然而,它是开发人员中的一种流行选项,因为它使用了常见的http方法,例如:
get:此命令检索资源
post:用于创建资源
put:更改状态或更新可以是对象、文件或块的资源
delete:删除资源
rest api的基础是资源的概念,这些资源由独特的url(统一资源定位符)识别。根据客户端的请求,每个资源可以有不同的表示,如下所示:
- json(javascript对象表示法),
- xml(可扩展标记语言),
- 和html(超文本标记语言)
restful api利用这些资源来检索数据、创建记录、更新记录或删除记录。
rest api的工作原理
rest api通过允许用户向通过url表示资源的服务器提交http请求来运作。处理请求后,服务器以指定的格式(json或xml)将信息发送回。
例如,想象一个允许用户访问与书籍相关信息的web应用程序。使用restful api,客户端可以获取有关单本书或一系列书籍的详细信息。
要获取特定书籍的信息,客户端使用资源url提交http get请求。链接可能是以下内容:https://example.com/api/books/123。处理请求并找到id为“123”的书籍后,服务器以选择的格式(json)提供响应。
同样,要获取书籍列表,客户端向服务器发送带有url“https://example.com/api/books”的http get请求。因此,服务器以所需格式(如json)作出响应。
graphql的特点
graphql是一种多功能和高效的查询语言,因为它提供了强大的类型和分层数据检索。以下是使graphql受到用户欢迎的一些关键特点:
强类型:graphql提供一个包含多种类型的api可访问数据,例如字段、对象和链接。为确保合法的数据传递,该模式用于验证查询和回复。
分层结构:graphql允许客户端指定他们需要的精确数据。因此,返回的冗余数据较少,从而提高了api的速度。
更有效:由于graphql可以使用单个请求获取多个资源,因此效率更高。它只使用一个端点处理所有查询,允许缓存和批量请求。
以客户为中心:graphql允许客户端控制所获取的数据,从而减少对服务器的调用次数。
不可知:由于graphql独立于底层数据库和技术堆栈,因此可以与任何后端技术集成。
自省:具有自省系统,使客户端能够了解其可访问数据、数据类型和链接。
订阅模型:订阅模型允许用户获取实时数据更新。客户端可以订阅特定数据的更改,并在更改时获取更新。
现在您已了解graphql的功能,让我们探索rest api为其客户端提供的功能。
rest api的功能
rest api非常注重遵循一套使api高度可访问、适应性强且易于扩展的标准:
无状态:restful api在每个请求中包含所有必要的数据。因此,它是无状态的、可扩展的且易于管理。
客户端-服务器架构:客户端-服务器架构,客户端从服务器请求数据,并返回。因此,前端和后端系统可以分开构建和维护。
基于资源:可访问的数据由资源表示。对于检索或修改,每个资源都有一个特定的url。
crud操作:rest api通过crud(创建、检索、更新和删除)操作管理资源。
一致的接口:提供了与资源交互的统一接口,简化了api架构和维护。
可缓存:支持缓存,减少了对服务器的查询次数,提高了效率。
分层结构:支持包括增加灵活性和可扩展性的代理服务器在内的分层结构。
graphql的优势
了解了graphql的功能后,让我们探索使其脱颖而出的优势。
性能更好:使用graphql可以通过减少在网络上发送的数据量来提高性能。
简化的api开发:
增加的灵活性:开发人员可以精确描述他们需要的数据及其组织方式。因此,它可以适应多种类型的客户端,如移动应用程序和web应用程序。
改进的开发者体验:
更好的文档:通过自文档化模式,更容易理解和利用api。
更快的迭代:
简化的数据聚合:用户可以将来自多个api和来源的信息集成到单个查询中。因此,数据聚合可以通过更简单的后端代码来实现。
graphql的应用和用例
在构建和使用api时,graphql提供了独特的解决方案。当按预期使用时,它可以成为以下示例用例的完美工具:
创建apis
graphql通常用于开发提供更快访问和检索数据的api。它帮助开发人员指定他们希望查询的数据的精确字段和结构,使api更轻、更快。
无头cms
当涉及到无头cms时,graphql可以用作数据层。它提供了一种将内容与显示层解耦的方式。此外,无头cms使开发人员能够有效灵活地检索和管理内容。
移动应用程序开发
由于移动应用程序通常具有有限的带宽,快速的数据检索变得至关重要。这就是graphql成为开发移动应用程序的理想工具的地方。此外,它使开发人员更容易实现离线支持和缓存等功能。
协作应用程序
graphql的订阅功能对于需要用户参与和实时数据更改的应用程序至关重要。因此,客户端可以订阅更新并从服务器接收即时传输。
微服务
在微服务架构中,服务通常需要相互通信,并具有不同的数据需求。graphql通过提供统一的接口来从各个服务检索数据来降低这种复杂性。
电子商务
graphql在检索和管理产品数据方面的灵活性和效率可以改进电子商务网站和应用程序。这允许实现动态更新产品可用性、用户特定的购买指南和特别优惠等功能。
数据科学
graphql灵活而强大的数据检索和分析能力使其成为数据科学应用的可行技术。它使开发人员能够更容易地对来自各种来源的数据进行高级分析和建模。
社交媒体
使用graphql,程序员可以查询和操作用户信息、博客文章和其他内容。这使得用户动态更新和更个性化的使用体验成为可能。
应用和用例:rest api
以下是rest api的一些主要应用和用例:
移动应用程序
rest api是为移动应用程序开发后端服务的一个很好的选择。它简单地从多个来源检索数据。例如,数据库、云存储、在线移动服务等。
web应用程序
rest api非常适合创建需要从多个来源获取数据的web应用程序。它提供了一种统一的访问和操作数据的方法,降低了web应用程序的复杂性。
物联网(iot)
您可以利用restful api将物联网设备与基于云的软件进行连接。例如,一个智能恒温器可以通过rest api与基于云的服务进行交互,以调节家庭温度。
电子商务网站
电子商务网站经常使用restful api来进行交易和与第三方服务的连接。例如,一个在线商店可以使用restful api从物流提供商获取运输数据或通过支付网关接受付款。
社交媒体平台
restful api在促进社交媒体网络提供有序访问其数据的能力方面起着至关重要的作用。使用它,程序员可以从twitter、facebook和linkedin等网站访问用户数据,以创建定制的社交媒体管理系统或本机应用。
graphql vs. rest api
让我们快速了解graphql和rest api之间的区别:
特点 | graphql | rest api |
数据检索 | 客户端可以以各种格式查询和检索所需的数据 | 客户端可以查询并接收预定格式的所有数据 |
数据请求与响应 | 可以处理复杂数据,并使用单个请求从多个源返回数据 | 需要多个查询来获取多个资源 |
数据查询灵活性 | 允许根据客户端的具体要求进行灵活的查询 | 查询的修改可能相对受限 |
缓存功能 | 支持缓存,提高性能,无需重新处理查询 | 由于预定义的返回样式,缓存可能更困难 |
整体性能 | 适用于高频率的数据检索 | 对于高频率数据,效率较低 |
版本控制条件 | 由于模式的更新是累积的,因此不需要版本控制 | 可能会导致带宽浪费和延迟的响应时间 |
学习曲线 | 学习曲线较陡峭,用户必须掌握模式和查询方法 | 使用简化的请求和响应样式,学习和使用更容易 |
文档 | 有相当数量的工具、文档和ide集成 | 工具、文档和ide支持有限 |
工具支持 | 支持程序、工具和库正在不断扩展 | 有一套成熟而强大的工具和资源 |
作者注
graphql允许客户端通过单个请求得到他们所需的数据。它非常适合具有复杂数据需求或需要高频率数据检索的应用程序。
另一方面,rest api提供了更强大的支持软件生态系统,并且更容易使用。它适用于需要使用方便的简单应用程序。此外,它还包括一个成熟的工具和库生态系统。
最后的想法
从上面可以看出,graphql和rest api在其优点和缺点上有明显的区别。总的来说,选择graphql还是rest api取决于开发人员的偏好和应用程序的需求。
您还可以查看一些常见的rest api面试问题和答案。