从 REST 到 GraphQL:技术选型和实现方式对比

随着现代 Web 应用程序变得越来越复杂,搭建一个抽象的 REST API 已经不再是最优解。为了解决传统 API 在查询数据时遇到的瓶颈和数据加载问题,GraphQL 应运而生。本文将从技术选型和实现方式对比这两种 API 技术,看看它们各自的优势和不足。

REST API

REST(Representational State Transfer)是一组处理网络资源的行为和状态的约束。API 的设计者通常将资源与转换(GET、POST、PUT、DELETE)相关的 URL 相关联。开发者可以通过发送 HTTP 请求来请求数据,并传递相关的参数和搜索条件,以获取 JSON 格式的响应数据。REST 属于一种比较成熟、广泛应用的标准化协议,具有以下优点:

优点:

  • 简单易用,无需复杂的客户端实现;
  • 标准化,支持很多格式的数据(比如 XML、JSON 等);
  • 传输层使用可靠的 TCP 协议,保证数据传输正确;
  • 容易扩展,适用于移动设备和 Web、桌面等多种平台。

缺点:

  • 过度通用化,不利于定制;
  • 客户端获取的数据可能会存在请求过多、传输数据量大等问题,影响性能;
  • 当查询过多时,客户端容易遭受“过载”的压力。

GraphQL

GraphQL 是一种由 Facebook 开源的查询语言和一个用来执行查询的运行时。GraphQL 通过定义类型和关系,以及 permitting 对预定义字段(field)和参数(arguments)进行编程,可以让客户端自由选择查询、返回所需内容和结构。与 REST API 的点对点请求相比,GraphQL 使用单个 API 知道所有资源,并提供面向查询的网络接口,这可以减少网络传输的负担。

优点:

  • GraphQL 提供了一种精确、强大的查询语言,支持复杂的查询;
  • 客户端可以精确指定需要返回的数据,提高了查询效率;
  • GraphQL API 可以轻松扩展,支持版本控制;
  • GraphQL 强制类型检查,可以减少很多运行时错误。

缺点:

  • 许多语言的绑定工具不支持 GraphQL;
  • 需要对服务端接口进行重构;
  • 相比 REST,学习曲线略高。

技术选型

在实现 Web 服务 API 时,以下是两种技术方案的对比:

前端

REST API

-- --- ------ ------
------------------------ -- --------------------- -- -------------------

-- --- ---------- --------
-------------------------- -- --------------------- -- -------------------

GraphQL

-- - ------ ----
------ - --- - ---- ---------------
------ - ----- - ---- ---------------

-- ------
----- --------- - ----
  -
    ----- -
      --
      --------
    -
  -
--
------ ------------------
  --- -------- ------ ---- -- -- -
    -- --------- ------ ------------------
    -- ------- ------ -------- -------

    ------ -
      ----
        -------------------- -- -
          --- ----------------------------------
        ---
      -----
    --
  --
---------
-- ------
----- -------- - ----
  ----- ------------ ---- -
    -------- ---- -
      ----
    -
  -
--

------ ---------------- ------------ --- - ---
  --- -------- ------ ---- -- -- -
    -- --------- ------ ------------------
    -- ------- ------ -------- -------
    ------ --------------------------
  --
---------

后端

REST API

----- ------- - -------------------
----- --- - ----------

-- --------
----------------- ----- ----- ---- -- -
  ----- ----- - ----- ------------
  ----------------
---

-- ------
--------------------- ----- ----- ---- -- -
  ----- ---- - ----- -------------- --- ------------- ---
  ---------------
---

GraphQL

----- ------- - -------------------
----- --- - ----------

----- - ------------- --- - - ---------------------------------

----- -------- - ----
  ---- ---- -
    --- ---
    ----- ------
    ------ ------
  -

  ---- ----- -
    ------ ------
    -------- ----- ----
  -
--

----- --------- - -
  ------ -
    ------ -- -- ------------
    ----- ------ - -- -- -- -------------- -- ---
  --
--

----- ------ - --- -------------- --------- --------- ---

------------------------ --- ---

------------ ----- ---- -- -- --
  --------------- ------ ----- -- --------------------------------------------
--

总结

在前端构建 Web 应用程序的时候,GraphQL 和 REST 技术都可以实现数据的查询和交互。GraphQL因其强大的查询语言和查询优化,可以为前端开发带来更快更高效的开发体验。虽然 GraphQL 对典型 Web 应用程序的性能具有更大的优势,但是在一些小型应用程序中,REST 也是非常优秀且有效的解决方案。所以在技术实现时,开发者可以从自己项目和需求出发,选择最适合自己项目的方案和技术实现方案。

参考资料

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6585d603d2f5e1655d05d03c


猜你喜欢

  • 使用 Hapi 实现 JWT 身份验证教程

    在现代 Web 应用程序中,身份验证是必不可少的。JSON Web Token (JWT) 是一种流行的身份验证方法,它允许在客户端和服务器之间安全地传递身份验证信息。

    10 个月前
  • 如何在 Cypress 中进行断网自动化测试?

    在前端开发中,我们经常需要测试我们的应用在不同网络环境下的表现。其中,断网场景是一个非常重要的测试场景,因为它可以帮助我们了解应用在网络异常情况下的表现,从而为我们提供改进应用的思路。

    10 个月前
  • 如何在 ES2020 中使用使大数使用指数记数法?

    在计算机科学中,有时候需要处理非常大的数字,例如计算天文数字或是加密算法中的密钥。然而 JavaScript 对于处理大数的支持一直以来都不是很好。在 ES2020 中,我们可以使用指数记数法来处理大...

    10 个月前
  • 响应式设计中如何处理图片压缩的问题

    随着移动设备的普及,响应式设计已经成为了现代网站设计的标准之一。在响应式设计中,图片是网站中不可或缺的一部分。然而,图片的大小和加载速度对于网站的性能影响非常大,特别是在移动设备上。

    10 个月前
  • Sass 入门(一)基础语法介绍

    在前端开发中,CSS 是不可避免的一部分,但是 CSS 语法相对简单,没有变量、函数、嵌套等特性,这使得 CSS 在开发过程中缺乏一些灵活性和可维护性。Sass 就是为了解决这些问题而生的,它是一种 ...

    10 个月前
  • 进阶 Mongoose:新增 / 修改操作方式详解

    Mongoose 是 Node.js 中最流行的 MongoDB ODM(Object Data Modeling)库之一,它提供了便捷的 API 以及强大的数据验证和映射功能,使得我们能够更加方便地...

    10 个月前
  • Node.js 使用 Sequelize 链接 MySQL 数据库

    在前端开发中,数据库是一个非常重要的组成部分。在 Node.js 中,Sequelize 是一种流行的 ORM(对象关系映射)框架,它提供了一种简单的方式来操作数据库。

    10 个月前
  • 如何使用 ES7 中的 Object.values() 方法打印出对象键的列表

    在前端开发中,我们经常需要遍历对象的属性,获取它们的值。ES7 中的 Object.values() 方法可以帮助我们快速获取对象的属性值,而不必手动遍历对象的属性。

    10 个月前
  • 如何使用 Server-Sent Events 提供实时数据通信无需依赖浏览器插件

    在 Web 开发中,实时数据通信是一个非常重要的话题。在过去,开发者们通常使用轮询或者 WebSocket 来实现实时通信。但是这些方法都有一些缺点,比如轮询会增加服务器的负担,WebSocket 需...

    10 个月前
  • Web Components 中避免父组件影响子组件样式的方法

    在 Web Components 中,我们常常会遇到父组件的样式会影响到子组件的样式的问题,这是因为 Web Components 是一种将组件封装在自己的作用域内的技术。

    10 个月前
  • 你不知道的 Koa2 中间件解析

    在前端开发中,我们经常使用 Koa2 框架来构建 Web 应用程序。Koa2 是一个轻量级的 Node.js Web 框架,它的设计理念是中间件(middleware)。

    10 个月前
  • React Native 如何处理 IOS 大文件上传的问题

    在 React Native 开发中,我们经常需要上传文件到服务器。但是,如果上传的文件比较大,会遇到一些问题,尤其是在 IOS 平台上。本文将介绍如何处理 IOS 大文件上传的问题。

    10 个月前
  • 详解 Chai.js 中 expect 方法的各种用法

    前言 Chai.js 是一个 JavaScript 断言库,它提供了三种风格的断言方式:expect、assert 和 should。其中,expect 风格是最常用的一种,它可以帮助我们编写更加简洁...

    10 个月前
  • Polymer 中使用自定义元素:模板和模块

    Polymer 是一个基于 Web Components 标准的前端框架,它提供了一种方便的方式来创建自定义元素和组件。在 Polymer 中,自定义元素是通过定义一个继承自 Polymer.Elem...

    10 个月前
  • ES6 中的 Proxy 和 Reflect 技术解析

    在 ES6 中,我们可以使用 Proxy 和 Reflect 技术来实现对象的拦截和代理。这两个技术的出现,为我们在前端开发中解决一些问题提供了新的思路和方法。本文将对这两个技术进行详细的解析,并给出...

    10 个月前
  • MongoDB 的坑点及解决方案探讨

    在前端开发中,数据库是不可或缺的一部分。而 MongoDB 作为 NoSQL 数据库的代表,因其灵活性、可扩展性和高性能等特点,越来越受到前端开发者的青睐。然而,在实际开发过程中,MongoDB 也存...

    10 个月前
  • 如何解决 Kubernetes 中 Pod 创建速度慢的问题

    背景 Kubernetes 是一款非常流行的容器编排工具,它可以帮助我们管理和调度容器化应用程序。在 Kubernetes 中,Pod 是最小的可调度单元,它包含一个或多个容器。

    10 个月前
  • 如何在 Angular 中封装 Service:使用 TypeScript 教程

    在 Angular 中,Service 是一个非常重要的概念。它们允许我们在应用程序中共享数据和功能,并且可以帮助我们将应用程序的逻辑分离出来。在本文中,我们将探讨如何在 Angular 中封装 Se...

    10 个月前
  • 如何在 GraphQL 中处理与 SQL 数据库的关联

    GraphQL 是一种新兴的 API 查询语言,它可以帮助前端开发人员轻松地查询和操作数据。与 RESTful API 相比,GraphQL 具有更高的灵活性和可扩展性,因此它已经成为许多公司的首选 ...

    10 个月前
  • 更快的 Node.js 开发:使用 Express.js 和 Webpack

    在现代 Web 开发中,前端开发已经成为了不可分割的一部分。而 Node.js 作为一种高效的服务器端运行环境,也为前端开发提供了更多的可能性。在 Node.js 中,Express.js 是最流行的...

    10 个月前

相关推荐

    暂无文章