使用 GraphQL 和 MySQL 构建高可用性 Web 应用

引言

随着 Web 应用的不断发展,前端技术也随之不断进步。在过去,前端应用主要是通过 RESTful API 与后端进行通信,但是 RESTful API 存在一些缺点,例如需要多次请求才能获取到完整的数据、无法限制返回的数据等。GraphQL 应运而生,它可以解决这些问题并提供更好的 API 设计方式。

MySQL 是一种流行的关系型数据库,它使用 SQL 语言进行数据操作,被广泛应用于 Web 应用的后端。在本文中,我们将介绍如何使用 GraphQL 和 MySQL 构建高可用性的 Web 应用。

GraphQL 简介

GraphQL 是一种用于 API 设计的查询语言和运行时环境。它的主要设计目标是提供一种更加高效、强大和灵活的 API 设计方式。GraphQL 具有以下特点:

  • 可以精确地指定需要返回的数据,避免了 RESTful API 中需要多次请求才能获取到完整的数据的问题。
  • 支持类型系统,可以定义数据类型和接口,使得 API 设计更加清晰和易于维护。
  • 支持多种数据源,可以方便地集成多种数据源,例如 MySQL、MongoDB 等。

GraphQL 的查询语言非常简洁,例如下面的查询:

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

这个查询会返回 ID 为 123 的用户的姓名和邮箱。在 RESTful API 中,可能需要多次请求才能获取到这些数据。

MySQL 简介

MySQL 是一种流行的关系型数据库,它使用 SQL 语言进行数据操作。MySQL 具有以下特点:

  • 支持 ACID 事务,保证数据的一致性和完整性。
  • 支持多种数据类型和索引,可以根据不同的需求进行优化。
  • 支持多种存储引擎,例如 InnoDB、MyISAM 等。

MySQL 的数据操作非常灵活,例如下面的 SQL 语句:

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

这个 SQL 语句会返回 ID 为 123 的用户的姓名和邮箱。

使用 GraphQL 和 MySQL 构建 Web 应用

下面我们将介绍如何使用 GraphQL 和 MySQL 构建高可用性的 Web 应用。我们将使用 Node.js 和 GraphQL Yoga 作为后端,使用 React 和 Apollo Client 作为前端。

后端

首先,我们需要安装 Node.js 和 MySQL,并创建一个数据库和一个表。假设我们创建了一个名为 webapp 的数据库,其中包含一个名为 users 的表,该表包含 idnameemail 三个字段。

接下来,我们可以使用 GraphQL Yoga 创建一个 GraphQL 服务器。GraphQL Yoga 是一个基于 Express 和 GraphQL 的库,提供了易于使用的 API,并且支持实时数据传输。

首先,我们需要安装 GraphQL Yoga:

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

然后,我们可以创建一个 index.js 文件,该文件包含以下代码:

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

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

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

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

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

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

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

这个文件定义了一个 user 查询,该查询接受一个 id 参数,并返回 ID 为该参数的用户的姓名和邮箱。我们使用 mysql 模块连接到 MySQL 数据库,并在 user 查询中执行 SQL 语句。

接下来,我们可以运行该服务器:

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

现在,我们可以使用 GraphQL Playground 工具测试该服务器。在浏览器中打开 http://localhost:4000,即可打开 GraphQL Playground。

在 GraphQL Playground 中,我们可以输入以下查询:

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

这个查询会返回 ID 为 1 的用户的姓名和邮箱。如果一切正常,服务器会返回以下结果:

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

前端

现在,我们已经成功地创建了一个 GraphQL 服务器,并且可以通过查询获取用户数据。接下来,我们将创建一个前端应用,使用 Apollo Client 从服务器获取数据。

首先,我们需要安装 React 和 Apollo Client:

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

然后,我们可以创建一个 index.js 文件,该文件包含以下代码:

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

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

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

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

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

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

这个文件定义了一个 GET_USER 查询,该查询接受一个 id 参数,并返回 ID 为该参数的用户的姓名和邮箱。我们使用 ApolloProviderQuery 组件从 GraphQL 服务器获取数据,并使用 gql 模板字符串定义查询。

接下来,我们可以运行该前端应用:

--- -----

现在,我们可以在浏览器中打开 http://localhost:3000,即可看到该前端应用。

该应用会自动从 GraphQL 服务器获取 ID 为 1 的用户的姓名和邮箱,并显示在页面上。如果一切正常,页面会显示以下内容:

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

总结

在本文中,我们介绍了如何使用 GraphQL 和 MySQL 构建高可用性的 Web 应用。我们使用 Node.js 和 GraphQL Yoga 作为后端,使用 React 和 Apollo Client 作为前端。通过这个示例,我们可以了解到 GraphQL 和 MySQL 的基本使用方法,并了解到如何将它们集成到 Web 应用中。希望本文对您有帮助。

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


猜你喜欢

  • ES7 中 Array.prototype.includes 方法的详解及其在实际项目中的应用

    在 JavaScript 编程中,数组是最常用的数据结构之一。ES7 提供了一个新方法 Array.prototype.includes,用于判断数组是否包含指定元素。

    9 个月前
  • VS Code 中使用 LESS

    什么是 LESS? LESS 是 CSS 预处理器的一种,它可以增加 CSS 的可维护性、可扩展性和代码重用性。LESS 通过增加变量、混合(mixin)、函数、嵌套等特性扩展了 CSS,使得我们可以...

    9 个月前
  • 如何编写更好的 Chai 测试代码

    Chai 是一个非常流行的 JavaScript 测试框架之一。它的主要目的是方便编写易读易于维护的测试代码。在本文中,我们将深入探讨如何编写更好的 Chai 测试代码。

    9 个月前
  • RESTful API 如何实现 Email 发送?

    在 Web 开发中,通过 RESTful API 实现 Email 发送功能是一个常见的需求。本文将介绍如何使用 RESTful API 实现 Email 发送,并附上代码示例。

    9 个月前
  • 如何在 JavaScript 中使用 ES11 中添加的可选链操作符

    在 ES11 中,增加了可选链操作符(Optional Chaining Operator),这个操作符的作用是可以在访问对象属性时,避免非空校验繁琐的操作,同时也能避免访问到不存在的属性时,程序崩溃...

    9 个月前
  • PWA 中的 Web Share API 实现分享功能

    作为一名前端工程师,你肯定知道PWA(Progressive Web App)的概念,它是一种应用程序模式,利用现代化网络技术将Web应用程序转化为可以像本地应用程序一样工作的应用程序。

    9 个月前
  • ES12 模块化编程的背景分析与实践指导

    1. 背景分析 随着现代 Web 应用程序的复杂性增加,JavaScript 的传统脚本式编程已经显得力不从心。为了摆脱这个问题,社区提出了许多解决方案,其中之一就是模块化编程。

    9 个月前
  • MongoDB 图形化工具推荐:Robomongo、Mongo Management Studio

    前言 MongoDB 是一个最受欢迎的 NoSQL 数据库之一,它受众多开发者和公司的欢迎。它采用了面向文档的数据模型,可以存储各种类型的数据。MongoDB 的灵活性和可扩展性是其最吸引人的特点之一...

    9 个月前
  • 特性测试:使用 Mocha, Chai 和 Selenium 测 React 与 Koa

    本文介绍了如何使用 Mocha, Chai 和 Selenium 进行特性测试,以测量 React 与 Koa 的功能。特性测试是软件测试的一种方法,旨在验证应用程序是否符合其要求。

    9 个月前
  • 深入浅出 Enzyme 中的 simulate 方法,模拟用户事件操作

    Enzyme 是一个流行的 React 测试工具,可以在代码中模拟用户操作并观察其响应。其中最常用的是 simulate() 方法,允许模拟用户交互,例如点击、输入等,从而确保应用程序在用户路线上的行...

    9 个月前
  • Docker Compose 中使用多个 Dockerfile 构建应用

    在前端开发中,使用 Docker Compose 可以帮助我们快速建立开发环境。而为了构建一个完整的应用,我们经常需要使用多个 Dockerfile 来构建不同的容器。

    9 个月前
  • 如何运用 Web Components 实现 WebRTC 客户端?

    前言 随着 Web 技术的日益成熟,WebRTC 技术也逐渐走入人们的视野。WebRTC 技术是浏览器本身提供的一种实现互联网实时通信的技术,可以用于视频会议、音频通话、实时数据传输等场景。

    9 个月前
  • 渐进式 TypeScript:从 JavaScript 之旅到 Angular

    在现代 Web 应用程序中,JavaScript 是最流行的编程语言之一,然而,它有一些缺点,如难以调试、容易导致错误等。因此,在开发大规模 Web 应用程序时,我们需要一种强类型的语言来增强代码的可...

    9 个月前
  • ES10 中的新特性:String.prototype.repeat()

    ES10 中的新特性:String.prototype.repeat() 在 ES10 中,String.prototype.repeat() 是一个新的方法,该方法返回一个包含指定字符串重复若干次的...

    9 个月前
  • Sequelize 使用 MSSQL 连接池时的注意事项

    Sequelize 是 Node.js 平台上的一个基于 Promise 的 ORM(对象关系映射)库,它支持多种关系数据库,并提供了一套简单易用的 API,帮助开发者快速进行数据库操作。

    9 个月前
  • ES7 新特性之 Object.entries() 方法

    JavaScript 已经成为前端开发的必备语言,而 ECMAScript 是 JavaScript 的标准化版本,它会定期发布新版本,本文将介绍 ES7 中新加入的 Object.entries()...

    9 个月前
  • 解决 Mongoose 中的负数存储问题

    在使用 Mongoose 进行数据存储时,我们可能会遇到一个问题:负数在存储时会变成正数,这会导致错误的计算结果和数据不一致。本文将介绍负数存储问题的原因、解决方法以及示例代码,帮助前端开发者更好地使...

    9 个月前
  • Airbnb React/JSX Style Guide 与 ESLint 规则实战指南

    React 是当前最流行的前端 UI 框架之一,其高效的虚拟 DOM 和声明式的编程风格让开发者可以更快速地构建复杂的用户界面。然而,由于 React 的灵活性,很多开发者在编写代码时容易出现一些不规...

    9 个月前
  • 如何在 Jest 中使用 ES6 语法

    Jest 是一个流行的 JavaScript 测试框架,它支持 JavaScript 和 TypeScript,被广泛用于前端和后端的单元测试和集成测试。在使用 Jest 进行测试时,我们经常需要使用...

    9 个月前
  • 在 Express.js 中使用 Nodemailer 发送电子邮件

    作为 Web 开发者,我们经常需要发送电子邮件。在 Node.js 生态系统中,Nodemailer 是一款常用的电子邮件发送库。它支持各种邮箱服务,并提供了灵活的配置选项。

    9 个月前

相关推荐

    暂无文章