简介
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 在前端开发中有非常重要的作用,我们可以尝试在实践中应用。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67d79864a941bf7134d97f56