简介
GraphQL 是一种用于 API 的查询语言和运行时环境,由 Facebook 于 2012 年开发并在 2015 年开源。相较于 RESTful API,GraphQL 有更好的灵活性和可扩展性。本篇文章将介绍 GraphQL 的基本概念以及如何搭建一个 GraphQL 服务器并进行测试。
GraphQL 介绍
GraphQL 的核心概念是:定义应用程序的数据模型、定义数据的类型、定义数据的关系,然后用 GraphQL 的 API 来查询和修改数据。GraphQL 的 API 由客户端指定需要获取的数据,使得客户端可以精确地获取所需数据,而不需要访问多个 API 以获取完整数据集。
GraphQL 的特征和优势:
- 声明性:客户端请求数据的方式非常声明性,不同于其他 API 通常使用 编程语言 调用HTTP方法的方式。
- 类型系统:定义了客户请求的数据类型和返回的数据类型。
- 强大的工具链:包含开发工具,便于在本地开发和维护现有代码库。
- 流式执行:支持运行时错误,避免了反复查询数据的情况发生。
- 多语言支持:支持各种编程语言,如 JavaScript,Java,Python,Ruby 等。
搭建 GraphQL 服务器
Step 1:安装必要的依赖
使用 npm 或者 yarn 安装 graphql
, express
, graphql-express
。
npm install graphql express graphql-express
Step 2:构建 GraphQL Schema
GraphQL Schema 定义了各种类型和根类型,描述了 GraphQL API 中提供的数据和操作。GraphQL Schema 使用 GraphQL SDL(Schema Definition Language)来定义,可以使用 buildSchema
方法将 GraphQL SDL 转换为可执行的 GraphQLSchema 对象。
const { buildSchema } = require('graphql'); const schema = buildSchema(` type Query { hello: String } `);
这里定义了一个名为 Query
的根类型,包含了一个名为 hello
的字段,这个字段的类型为字符串。
Step 3:定义 Resolver
Resolver 是用于执行 GraphQL 操作的函数,用于返回 Query 或 Mutation 所定义的类型的实现,Resolver 中的函数接收参数并返回数据。
const { graphql } = require('graphql'); const rootResolver = { hello: () => 'Hello, world!' };
实现了一个 hello
函数,返回字符串 Hello,world!
。
Step 4:搭建 Express 应用
const express = require('express'); const graphqlExpress = require('graphql-express'); const app = express(); app.use('/graphql', graphqlExpress({ schema, rootValue: rootResolver })); app.listen(3000, () => console.log('Server running on http://localhost:3000/graphql'));
我们定义了一个使用 GraphQL 的 Express 应用,并将其设置为监听 3000 端口。当发出请求时,路由 /graphql 将使用 graphqlExpress 处理 GraphQL 查询,并将其发送到定义的 schema 和 rootResolver 中。
测试 GraphQL 服务器
使用 GraphiQL 测试
GraphiQL 是一款用于调试 GraphQL 的开发者工具,它可以帮助你编写查询和测试 API 。
- 打开浏览器,输入 http://localhost:3000/graphql。
- 在 GraphiQL 界面上,直接输入下面这段代码:
query { hello }
我们定义了一个名为 hello
的函数,返回了一个字符串 “Hello, world!”。运行上述操作,GraphiQL 将返回查询结果以及所用时间。
{ "data": { "hello": "Hello, world!" } }
使用 Jest 测试框架测试
-- -------------------- ---- ------- ----- - ------- - - ------------------- ---------------------- -- -- ----------------------------- ----- - ------ - - --------------------- ----- - ------------ - - ----------------------- ------------------ -- -- - ------------- -------- -------- --- ----- ------- ----- -- -- - ----- ----- - - ----- - ----- - -- ----- -------- - ----- --------------- ------ -------------- -------------------------- ----- - ------ ------- ------- - --- --- ---展开代码
使用 Jest 测试框架可以进行单元测试。首先我们在 __mocks__
目录下定义了 schema.js
模块的模拟版本,以便测试中使用。通过调用 graphql()
函数并传入 schema、query 和 resolver,我们可以对在前文中定义的返回“Hello,world!”的 hello()
函数进行测试。
结语
本篇文章介绍了 GraphQL 的基本概念和特性,并提供了一个 GraphQL 服务器的搭建和测试流程。通过这个概念和实践的操作,我们更深入地了解了 GraphQL。GraphQL 语言和 GraphQL API 使得客户端能够请求其所需的精确数据,而不是根据 RESTful API 的资源移动方式来获取全部的数据。因此 GraphQL 在前端开发中有非常重要的作用,我们可以尝试在实践中应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d79864a941bf7134d97f56