比较REST和 GraphQL - AWS AppSync

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

比较REST和 GraphQL

APIs(应用程序编程接口)在促进应用程序之间的数据交换方面起着至关重要的作用。如前所述,出现APIs了两种突出的设计方法:GraphQL和。REST虽然两者的基本目的是实现客户端-服务器通信,但它们的实现和用例有很大不同。

GraphQL 和 GraphQL 有几个REST共同的关键特征:

  1. 客户端-服务器模型:两者都使用客户端-服务器架构进行数据交换。

  2. 无国籍状态:两者都不会在两次请求之间保留客户会话信息。

  3. HTTP基于:两者通常都HTTP用作底层通信协议。

  4. 以资源为导向的设计:两者都围绕资源设计数据交换,资源是指客户端可以通过访问和操作的任何数据或对象。API

  5. 数据格式灵活性:JSON是两者中最常用的数据交换格式,但HTML也支持XML和等其他格式。

  6. 语言和数据库不可知:两者都可以与任何编程语言或数据库结构配合使用,因此具有很高的互操作性。

  7. C@@ ach ing Support:两者都支持缓存,允许客户端和服务器存储经常访问的数据以提高性能。

在分享一些基本原理的同时,GraphQL 和 GraphQL 在API设计和数据获取方法上有很大REST不同:

  1. 请求结构和数据获取

    REST使用不同的HTTP方法(GET、POSTPUT、、DELETE)对资源执行操作。这通常需要为不同的资源使用多个端点,这可能会导致数据检索效率低下。例如,运行检索用户数据的GET操作可能会导致数据过度提取或提取不足。为了获得正确的数据,可能会调用截断或多个操作。

    GraphQL 使用单个端点进行所有操作。它依赖查询来获取数据,依赖突变来修改数据。客户端可以使用查询在单个请求中精确获取所需的数据,从而通过最大限度地减少数据传输来减少网络开销。

  2. 服务器端架构

    REST不需要服务器端架构,但可以选择定义服务器端架构,以实现高效的API设计和文档。

    GraphQL 使用强类型的服务器端架构来定义数据和数据服务。该架构采用 GraphQL 架构定义语言 (SDL) 编写,包括每个对象的对象类型和字段,以及为每个字段定义操作的服务器端解析器函数。

  3. 版本控制

    REST中通常包括版本控制URL,这可能导致同时维护多个API版本。版本控制不是强制性的,但可以帮助防止重大更改。

    GraphQL 要求向后兼容,从而促进API无需明确版本控制的持续演进。删除的字段会返回错误消息,而弃用标签会逐步淘汰旧字段并返回警告消息。

  4. 错误处理

    REST类型较弱,需要在周围的代码中内置错误处理。这可能无法自动识别与类型相关的错误(例如,将数字解析为文本)。

    相比之下,GraphQL 是强类型化的,需要全面的架构定义。这使您的服务能够以高度详细的方式自动识别许多请求错误。

  5. 使用案例

    REST更适合:

    • 较小的应用程序,数据要求不那么复杂。

    • 所有客户端以类似方式使用数据和操作的场景。

    • 无需复杂数据查询需求的应用程序。

    GraphQL 更适合:

    • 带宽有限的场景,其中最小化请求和响应至关重要。

    • 具有多个数据源的应用程序,需要在单个端点上进行组合。

    • 客户请求差异很大,并且期望响应结构不同的情况。

    请注意,可以同时使用GraphQL和RESTAPIs单个应用程序来实现不同的功能领域。此外,您无需完全重写即可升级RESTfulAPI以包含 GraphQL 功能。有关示例,请参阅如何为 AWS 数据源构建 GraphQL 解析器