为什么 GraphQL 的模式语言比 RESTful API 更优秀?

随着互联网的快速发展,Web 应用程序的需求也越来越复杂。在过去,我们都是通过 RESTful API 来构建 Web 应用程序的。但是,RESTful API 在某些情况下并不太理想。特别是在前端领域,RESTful API 的缺点就更加明显了。这就是为什么有些前端开发人员转而使用 GraphQL 的模式语言。

RESTful API 的缺点

RESTful API 最早由 Roy Fielding 在他的博士论文中提出。RESTful API 是一种约束性架构,它遵循 HTTP 协议。RESTful API 可以使 Web 应用程序的状态变得可转移,这意味着它可以像浏览网页一样访问 Web 应用程序的资源。

随着前端技术的不断发展,Web 应用程序的需求也日趋复杂。虽然 RESTful API 有一些优点,但它也有很多缺点。

  1. 过度获取数据。 RESTful API 返回的数据可能包含不必要的信息,这会浪费网络带宽和服务器资源。例如,如果一个 Web 页面只需要某个单一对象的一部分属性,那么 RESTful API 也会返回整个对象和所有的属性。

  2. 版本管理困难。 当你的 Web 应用程序与多个不同版本的 API 通信时,你需要在客户端和服务器中进行版本管理。这可能会导致很多麻烦,尤其是当旧版本的 API 还在被使用时。

  3. 对于关系型数据的处理比较麻烦。 当一个单一的 RESTful API 请求返回多个对象时,这可能会导致很多次请求。客户端需要执行多次请求来获取所有需要的数据。这使得处理关系型数据比较麻烦。

为了解决这些问题,出现了 GraphQL。

GraphQL 的优点

GraphQL 最初由 Facebook 提出。它是一种查询语言,允许客户端指定自己需要的数据。GraphQL 可以查询多个对象,并返回必要的数据。当客户端需要更多数据时,它可以指定更多查询字段。

GraphQL 有很多的优点,特别是在前端领域。

  1. 只获取所需数据。 GraphQL 可以确保每个请求只返回客户端需要的数据。这会降低网络带宽和服务器资源的使用。

  2. 配置便捷。 GraphQL 可以轻松地在客户端和服务器之间进行更新和修改。因此,在处理版本管理时,它相对于 RESTful API 更为容易。

  3. 处理关系型数据方便。 GraphQL 可以一次性查询多个对象。因此,在处理关系型数据时,只需要执行一次查询,而不像 RESTful API 一样需要多次查询。

下面是具体的代码示例:

在 RESTful API 中,为了获取一个订单的信息,我们需要执行以下几个步骤:

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

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

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

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

在 GraphQL 中,我们只需要执行以下一条查询即可:

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

这条查询会返回对应订单的所有商品和运输地址,而不需要发出多个请求。

总结

虽然 RESTful API 和 GraphQL 都有其优点和缺点,但对于前端开发人员来说,GraphQL 提供了更好的灵活性,更好的性能和更高的生产力。

如果你正在处理复杂的 Web 应用程序,那么考虑下使用 GraphQL 这种新兴的查询语言。它可以在是否使用它的 Web 应用程序中的性能和开发中的生产力方面提供很大的帮助。

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


猜你喜欢

  • RxJS 中如何使用 takeUntil() 函数取消订阅

    概述 RxJS 是 React 框架中常用的响应式编程库,它提供了订阅流、处理异步请求等功能。takeUntil() 函数是 RxJS 中一个非常有用的操作符,它可以帮助我们取消流的订阅。

    1 年前
  • 解决 ESLint 和 Sass Lint 冲突的问题

    在前端开发中,我们经常使用静态代码检查工具来帮助我们发现代码中的潜在问题。其中,ESLint 是一个广泛使用的 JavaScript 静态代码检查工具,而 Sass Lint 则是用于检查 Sass ...

    1 年前
  • Dockerfile 中 ARG 与 ENV 的区别和使用

    在 Dockerfile 文件中,ARG 和 ENV 都是用来设置环境变量的指令。不过它们之间有些许不同之处,本文将重点介绍这两者的区别和使用方法,并提供相应的示例代码。

    1 年前
  • ES6 class 继承可能遇到的问题及解决方案

    ES6 引入了 class 语法,使得创建对象更加简便明了。然而,当使用 class 继承时,有些问题需要注意和处理。 问题一:super 要在 this 之前调用 在使用 class 继承时,在子类...

    1 年前
  • PWA 应用的关键特性以及如何实现

    PWA(Progressive Web Apps)是一种新型的 Web 应用,它可以像原生应用一样提供用户体验。PWA 应用具有许多优点,如离线缓存、快速加载、可靠性强等。

    1 年前
  • Sequelize 操作 PostgreSQL 的实践及注意事项

    简介 Sequelize 是一个支持多种数据库的 Node.js ORM,可以简化我们与数据库的交互,提高开发效率。其中,PostgreSQL 是 Sequelize 支持的数据库之一,支持包括查询、...

    1 年前
  • 在 ES7 中使用 Array.prototype.fill 方法填充数组

    在 JavaScript 中,数组是一种非常灵活且实用的数据结构。而 Array.prototype.fill 是一个数组原型方法,可以用于填充数组中的元素,使其都变成相同的值。

    1 年前
  • Kubernetes 中的调度器和节点选择器

    背景 Kubernetes 是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它的核心是调度器和节点选择器,它们负责将容器部署到正确的节点上,以实现最佳的资源分配和负载均衡。

    1 年前
  • 在 Mocha 测试框架中使用 Promises 解决异步问题

    Mocha 是一个功能强大的测试框架,它支持异步测试用例。然而,在编写异步测试用例时,遇到错误的处理方式可能会导致测试失败,甚至崩溃。为了解决这些问题并使测试代码更加简洁和可靠,使用 Promises...

    1 年前
  • 使用 combineLatest() 函数对 RxJS 流进行数据批处理

    RxJS 是一个功能强大并且流行的 JavaScript 库,它提供了许多用于操作和处理异步数据流的工具。其中一个十分常用的操作符是 combineLatest()。

    1 年前
  • 如何使用 ESLint 检查 Json 格式

    作为前端开发者,我们不仅需要写有效的 HTML、CSS 和 JavaScript 代码,也需要确保数据格式正确无误。这时候,ESLint可以帮助我们减少错误和提高代码的质量,同样也可以用来检查JSON...

    1 年前
  • 如何使用 Babel-plugin-transform-runtime 解决异步编程问题

    JavaScript 在异步编程上有一个很大的挑战:缺乏同步语义;Promise、async/await 等语言特性虽然可以减轻这种困境,但是也会带来新的问题。在这篇文章中,我们将介绍如何使用 Bab...

    1 年前
  • Vue SPA 项目源码分析与实践

    Vue 是一款流行的前端 JavaScript 框架,拥有丰富的生态系统和社区支持,已逐渐成为前端开发的主流选择。单页应用(SPA)是一种通过 JavaScript 动态更新页面内容的应用程序。

    1 年前
  • 使用 Jest 测试 React 组件的 DOM 事件

    在前端开发中,测试是一个极其重要的组成部分。而在 React 开发中,Jest 是一种非常流行的测试框架,可以帮助我们更加轻松地进行代码测试。本文将介绍如何使用 Jest 测试 React 组件的 D...

    1 年前
  • 如何在 Headless CMS 中处理 Unions 和 Interfaces?

    当使用Headless CMS来建立动态网站时,GraphQL 是一种非常强大的语言,可以允许开发人员进行高度灵活的数据查询。而在 GraphQL 中一个重要的概念是Unions和Interfaces...

    1 年前
  • Hapi.js 项目:我们是如何写出高质量路由的

    Hapi.js 项目:我们是如何写出高质量路由的 路由是一个网站的骨架,它可以指定用户在浏览器中输入 URL 时将请求发送给哪个页面。在 Hapi.js 项目中,路由扮演着至关重要的角色,它决定着请求...

    1 年前
  • 实战 GraphQL + Redis:如何加速 API 响应速度

    在开发中,API 的响应速度是非常重要的。随着用户量的增加,数据量也随之增加,API 的响应速度也会受到影响。因此我们需要寻找一种对响应速度影响小的方法来进行优化。

    1 年前
  • TypeScript 中的 `never` 类型详解

    TypeScript 中的 never 类型是一个特殊的类型,它表示从不会出现的值。never 的使用场景相对较少,但是在某些情况下却能够大显神威,让我们来深入探究一下。

    1 年前
  • 在 Ubuntu 上使用 PM2 启动 Node.js 应用

    简介 当我们部署一个 Node.js 应用时,我们需要确保它可以在后台长时间运行,并且在崩溃或异常情况下自动重启。PM2 是一个流行的进程管理器,可以解决这些问题,并提供许多有用的功能。

    1 年前
  • LESS 圣杯布局技术详解及实现方法

    概述 在前端开发中,页面布局是一个需要经常处理的问题。其中,圣杯布局技术是一种广泛应用的技术之一。本文将详细介绍 LESS 圣杯布局技术的实现方法。通过本文的学习,您将掌握 LESS 圣杯布局技术的基...

    1 年前

相关推荐

    暂无文章