GraphQL 是一种由 Facebook 开发的数据查询语言,其主要特点是能够在客户端自定义请求数据,避免了传统 RESTful API 中出现的“过度获取”或“过度请求”的问题。而 MySQL 是一种流行的关系型数据库,其稳定性和可扩展性得到了广泛认可。本文将介绍如何将 GraphQL 和 MySQL 结合起来,构建高效的查询服务。
环境配置
首先,需要安装 MySQL 数据库,并创建一个名为 graphql
的数据库。接着,需要在该数据库中创建一个名为 users
的表,其中包含以下字段:
- id:整数类型,主键
- name:字符串类型,用户姓名
- age:整数类型,用户年龄
- email:字符串类型,用户邮箱
- createdAt:日期类型,用户创建时间
接下来,需要安装 Node.js 和 npm,然后使用 npm 安装以下依赖项:
- express:用于创建 HTTP 服务器
- express-graphql:用于创建 GraphQL 服务器
- graphql:GraphQL 的 JavaScript 实现
- mysql2:MySQL 的 Node.js 驱动程序
编写 GraphQL Schema
在创建 GraphQL 服务器之前,需要编写 GraphQL Schema,它定义了可用的查询和数据类型。在本例中,我们将定义一个名为 User
的数据类型,它包含了 id
、name
、age
、email
和 createdAt
字段。我们还将定义一个名为 Query
的根查询类型,它包含了一个 users
查询,用于检索所有用户。
-- -------------------- ---- ------- ---- ---- - --- -- ----- ------ ---- --- ------ ------ ---------- ------ - ---- ----- - ------ ------ -
编写 GraphQL Resolver
接下来,需要编写 GraphQL Resolver,它负责处理查询请求并返回相应的数据。在本例中,我们将使用 MySQL 查询数据库,并将查询结果转换为 GraphQL 数据类型。以下是 users
查询的 Resolver 示例:
-- -------------------- ---- ------- ----- ----- - -------------------------- ----- ---------- - ----- ------------------------ ----- ------------ ----- ------- --------- ----------- --------- --------- --- ----- --------- - - ------ - ------ ----- -- -- - ----- ------ - ----- ------------------------ - ---- -------- ------ ------------ -- -- ------- ---------- --------------------------- ---- - - --
在上面的代码中,我们使用 mysql2
创建了一个 MySQL 连接,并在 users
查询中执行了一个简单的 SELECT
语句。我们还将查询结果中的 createdAt
字段转换为 ISO 字符串格式,以便 GraphQL 可以正确解析它。
创建 GraphQL 服务器
最后,我们需要使用 express-graphql
创建一个 GraphQL 服务器,并将前面定义的 Schema 和 Resolver 传递给它。以下是完整的代码示例:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - ----------- - - --------------------------- ----- - ----------- - - ------------------- ----- ----- - -------------------------- ----- ---------- - ----- ------------------------ ----- ------------ ----- ------- --------- ----------- --------- --------- --- ----- ------ - ------------- ---- ---- - --- -- ----- ------ ---- --- ------ ------ ---------- ------ - ---- ----- - ------ ------ - --- ----- --------- - - ------ - ------ ----- -- -- - ----- ------ - ----- ------------------------ - ---- -------- ------ ------------ -- -- ------- ---------- --------------------------- ---- - - -- ----- --- - ---------- -------- ----------- ------------- ------- ---------- ---------- --------- ---- -- -- ---------------- -- -- - -------------------- ------ ------- -- -------------------------------- ---
在上面的代码中,我们首先创建了一个 MySQL 连接,并使用 buildSchema
构建了 GraphQL Schema。接着,我们编写了 Resolver,并将 Schema 和 Resolver 传递给 graphqlHTTP
函数,创建了一个 GraphQL 服务器。最后,我们使用 express
创建了一个 HTTP 服务器,并将 GraphQL 服务器挂载到其上。
使用 GraphQL 查询数据
现在,我们可以使用 GraphQL 查询语言查询数据了。打开浏览器,访问 http://localhost:3000/graphql,可以看到 GraphQL Playground。在左侧的查询编辑器中输入以下查询语句:
-- -------------------- ---- ------- ----- - ----- - -- ---- --- ----- --------- - -
点击运行按钮,就可以看到查询结果了。以下是示例查询结果:
-- -------------------- ---- ------- - ------- - -------- - - ----- -- ------- -------- ------ --- -------- -------------------- ------------ -------------------------- -- - ----- -- ------- ------ ------ --- -------- ------------------ ------------ -------------------------- -- - ----- -- ------- ---------- ------ --- -------- ---------------------- ------------ -------------------------- - - - -
总结
本文介绍了如何将 GraphQL 和 MySQL 结合起来,构建高效的查询服务。通过编写 Schema 和 Resolver,创建 GraphQL 服务器,并使用 GraphQL 查询语言查询数据,我们可以轻松地实现客户端自定义请求数据的功能,避免了传统 RESTful API 中出现的“过度获取”或“过度请求”的问题。如果您对 GraphQL 和 MySQL 感兴趣,可以继续深入了解它们的更多特性和用法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65897d11eb4cecbf2ded11d3