本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
比较REST和 GraphQL
APIs(应用程序编程接口)在促进应用程序之间的数据交换方面起着至关重要的作用。如前所述,出现APIs了两种突出的设计方法:GraphQL和。REST虽然两者的基本目的是实现客户端-服务器通信,但它们的实现和用例有很大不同。
GraphQL 和 GraphQL 有几个REST共同的关键特征:
-
客户端-服务器模型:两者都使用客户端-服务器架构进行数据交换。
-
无国籍状态:两者都不会在两次请求之间保留客户会话信息。
-
HTTP基于:两者通常都HTTP用作底层通信协议。
-
以资源为导向的设计:两者都围绕资源设计数据交换,资源是指客户端可以通过访问和操作的任何数据或对象。API
-
数据格式灵活性:JSON是两者中最常用的数据交换格式,但HTML也支持XML和等其他格式。
-
语言和数据库不可知:两者都可以与任何编程语言或数据库结构配合使用,因此具有很高的互操作性。
-
C@@ ach ing Support:两者都支持缓存,允许客户端和服务器存储经常访问的数据以提高性能。
在分享一些基本原理的同时,GraphQL 和 GraphQL 在API设计和数据获取方法上有很大REST不同:
-
请求结构和数据获取
REST使用不同的HTTP方法(GET、POSTPUT、、DELETE)对资源执行操作。这通常需要为不同的资源使用多个端点,这可能会导致数据检索效率低下。例如,运行检索用户数据的GET操作可能会导致数据过度提取或提取不足。为了获得正确的数据,可能会调用截断或多个操作。
GraphQL 使用单个端点进行所有操作。它依赖查询来获取数据,依赖突变来修改数据。客户端可以使用查询在单个请求中精确获取所需的数据,从而通过最大限度地减少数据传输来减少网络开销。
-
服务器端架构
REST不需要服务器端架构,但可以选择定义服务器端架构,以实现高效的API设计和文档。
GraphQL 使用强类型的服务器端架构来定义数据和数据服务。该架构采用 GraphQL 架构定义语言 (SDL) 编写,包括每个对象的对象类型和字段,以及为每个字段定义操作的服务器端解析器函数。
-
版本控制
REST中通常包括版本控制URL,这可能导致同时维护多个API版本。版本控制不是强制性的,但可以帮助防止重大更改。
GraphQL 要求向后兼容,从而促进API无需明确版本控制的持续演进。删除的字段会返回错误消息,而弃用标签会逐步淘汰旧字段并返回警告消息。
-
错误处理
REST类型较弱,需要在周围的代码中内置错误处理。这可能无法自动识别与类型相关的错误(例如,将数字解析为文本)。
相比之下,GraphQL 是强类型化的,需要全面的架构定义。这使您的服务能够以高度详细的方式自动识别许多请求错误。
-
使用案例
REST更适合:
-
较小的应用程序,数据要求不那么复杂。
-
所有客户端以类似方式使用数据和操作的场景。
-
无需复杂数据查询需求的应用程序。
GraphQL 更适合:
-
带宽有限的场景,其中最小化请求和响应至关重要。
-
具有多个数据源的应用程序,需要在单个端点上进行组合。
-
客户请求差异很大,并且期望响应结构不同的情况。
请注意,可以同时使用GraphQL和RESTAPIs单个应用程序来实现不同的功能领域。此外,您无需完全重写即可升级RESTfulAPI以包含 GraphQL 功能。有关示例,请参阅如何为 AWS 数据源构建 GraphQL 解析器
。 -