⭐️ 本文首发自 前端修罗场(点击加入),是一个由 资深开发者 独立运行 的专业技术社区,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展现在加入,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见,交个朋友,少走弯路,少吃亏!

了解事物幕后的运作方式往往有好处,但并非总是如此。 因为不必使事情过于复杂。而可视化图形界面在处理这么一个场景中,是首当其冲的。

在本文中,我将带你了解如何使用 GraphiQL 来辅助 GraphQL 的开发。

什么是 GraphQL?

在我们谈论 GraphiQL 之前,让我们先谈谈 GraphQL

GraphQL 是一种用于应用程序编程接口 (API) 的开源数据查询和操作语言,也是一种使用现有数据完成查询的运行时。

GraphQL 于 2012 年由 Facebook 内部开发,然后于 2015 年向公众发布。

与 REST方法相比,开发人员更喜欢它,但本篇文章我们不会关注关于 RESTful 方法和 GraphQL 的优缺点的比较。

什么是 GraphiQL?

现在,如果你熟悉 RESTful API,你可能会知道 Postman 和 Insomnia 之类的工具,因为它们不仅可以帮助我们快速可视化 API 开发,还可以帮助我们更快地完成工作。

同样,你可以将 GraphiQL 视为 Postman 或 Insomnia。 因为 GraphiQL 是 GraphQL 集成开发环境 (IDE)。

它这是一个强大的工具,可以帮助你直观地构建 GraphQL 查询的工具。

在我们开始学习之前,希望你具备以下知识:

  • 对 Node.js, npm 有基本了解;
  • 了解基本的 express.js 搭建服务器的设置;

开始

我们正在构建一个 express.js 服务器,它是一个 Node.js 函数并将其放入变量的地方;应用程序。

现在,我们将创建一个文件夹来存放我们的项目文件。

进入新创建或所需的文件夹后,在命令行界面 (CLI) 上运行它:

npm init -y

这将在你所在的文件夹中创建一个 package.json 文件。

接下来要做的是安装我们项目所需的依赖包。 运行:

npm install graphql express-graphql express。

你应该将 "dev": "node app.js" 添加到 package.json 文件中的 script 对象中:

script: {"dev": "node app.js"}

安装完成后,你的 package.json 文件应如下所示:

因为 express.js 不知道 如何与 graphql 进行通信,所以我们安装了 express-graphql 依赖包。

接着,在你的文件夹中,创建一个名为 app.js 的文件并填入以下代码:

//js const express = require('express');const { graphqlHTTP } = require('express-graphql');const schema = require('./schema/schema');const app = express();// bind express with graphqlapp.use('/graphql', graphqlHTTP({schema,graphiql: true}));app.listen(2020, () => {console.log('now listening at port 2020');});

这段代码是我们工作的切入点。

在第 4 行,我们引入了一个自定义路径 schema.js。后面我会提到它。

然后第 5 行是我们实例化 express 函数并将其赋值给 app 这个常量。

从第 7 行到第 10 行,我们首先调用 app.use(),它允许我们在 express.js 中注册中间件。

每当我们点击路由 /graphql 时,它始终会调用 graphqlHTTP() ,并添加对象。

我们希望能够以图形方式看到正在发生的事情,因为我们给 graphiql 一个“true”值。

现在,在项目的文件夹中创建一个文件夹。然后在刚刚创建的文件夹中,创建一个名为 “schema.js” 的文件。

将以下代码填入到 schema.js 文件中:

//jsconst graphql = require("graphql");const _ = require("lodash");const { countries } = require("./country");const { GraphQLObjectType, GraphQLString, GraphQLSchema, GraphQLID } = graphql;const CountryType = new GraphQLObjectType({name: "Country",fields: () => ({id: { type: GraphQLID },name: { type: GraphQLString },capital: { type: GraphQLString },}),});const RootQuery = new GraphQLObjectType({name: "RootQueryType",fields: {country: {type: CountryType,args: { id: { type: GraphQLID } },resolve(parent, args) {return _.find(countries, { id: args.id });},},},});module.exports = new GraphQLSchema({query: RootQuery,});

代码中我们使用到了 lodash 这个包,所以请在命令行中运行:npm intsall loadash 以安装它。

schema 文件夹中,我们需要创建一个名为 country.js 的文件并填入以下代码:

var countries = [{ name: 'Portugal', capital: 'Libson', id: '1' },{ name: 'Canada', capital: 'Ontario', id: '2' },{ name: 'Nigeria', capital: 'Abuja', id: '3' },];module.exports = {countries};

最后,你的项目文件夹应如下所示:

现在,回到 schema/schema.js

从第 2 行到第 5 行,我们导入 schema/country.js 的内容,该内容的结构与 GraphQL 服务器所需的内容结构是保持一致的。

从第 6 行到第 13 行,变量 CountryType 由来自 graphql 的 GraphQLObjectType() 方法实例化。 其中有两个属性:name 和 fields

name 的值为 “Country”,其中作为属性的字段也是一种隐式返回对象(id; name capital)的方法。

从第 14 行到第 25 行,我们有一个新的 GraphQLObjectType() 实例,它被放在变量 RootQuery 中。 我们看到我们正在使用 Loadash 通过 id 返回 countries

如果一切都正确完成,你应该能够在 GraphiQL 界面中运行你的 GraphQL。

运行 npm run dev

然后,在你的浏览器中,转到 http://localhost:2020/graphql,你应该会看到:

是的,现在你可以使用 GraphiQL 界面测试你的 API。 你可以尝试通过在浏览器中粘贴以下内容来获取我们 country.js 中 id 为 1 的 name 和 capital:

{country(id: 1) {namecapital}}

完成此操作后,点击“Play”图标,你应该会在屏幕的另一侧看到如下响应:

结尾

现在,我们已经完成了关于如何使用 GraghQL 的默认可视化工具 GraphiQL 可视化你的 GraphQL 模式的教程。

我们也已经看到 GraphQL 提供了一种很好的方法来查询 API 中的某些内容。