当前位置:网站首页>使用 GraphiQL 可视化 GraphQL 架构
使用 GraphiQL 可视化 GraphQL 架构
2022-07-31 15:10:00 【前端修罗场】
️ 本文首发自 前端修罗场(点击加入),是
一个由 资深开发者 独立运行 的专业技术社区
,我专注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 graphql
app.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
文件中:
//js
const 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) {
name
capital
}
}
完成此操作后,点击“Play”图标,你应该会在屏幕的另一侧看到如下响应:
结尾
现在,我们已经完成了关于如何使用 GraghQL 的默认可视化工具 GraphiQL 可视化你的 GraphQL 模式的教程。
我们也已经看到 GraphQL 提供了一种很好的方法来查询 API 中的某些内容。
边栏推荐
猜你喜欢
TRACE32 - SNOOPer-based variable logging
AVH部署实践 (一) | 在Arm虚拟硬件上部署飞桨模型
Essential Learning for Getting Started with Unity Shader - Transparency Effect
01 邂逅typescript,环境搭建
WeChat chat record search in a red envelope
安装Xshell并使用其进行Ymodem协议的串口传输
Prometheus之node_exporter性能监控信息采集含义
"Listen to me, thank you" can be said in ancient poetry?Tsinghua University has developed an artifact of "Searching Sentences According to Meaning", which can search for the famous sayings you want wi
LeetCode二叉树系列——110.平衡二叉树
微信聊天记录中搜索红包
随机推荐
ES6 类
Unity Shader入门精要学习——透明效果
Selenium自动化中无头浏览器的应用
R语言ggstatsplot包ggbarstats函数可视化条形图、并添加假设检验结果(包含样本数、统计量、效应大小及其置信区间、显著性、组间两两比较、贝叶斯假设)、检验结果报告符合APA标准
Architecture actual combat battalion module 8 message queue table structure design
数据库的范式(第一范式,第二范式,第三范式,BCNF范式)「建议收藏」
力扣:738.单调递增的数字
Spark学习(3)-Spark环境搭建-Standalone
UnityShader入门学习(三)——Unity的Shader
DeepLab Series Learning
Small test knife: Go reflection helped me convert Excel to Struct
Excel quickly aligns the middle name of the table (two-word name and three-word name alignment)
PDF 拆分/合并
How useful is four-quadrant time management?
定时器的类型
R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化分组箱图、使用ggpar函数改变图形化参数(caption、添加、修改可视化图像的题注、脚注内容)
R language ggplot2 visualization: use the ggboxplot function of the ggpubr package to visualize the box plot, use the font function to customize the font size, color, style (bold, italic) of the legen
R语言检验样本是否符合正态性(检验样本是否来自一个正态分布总体):shapiro.test函数检验样本是否符合正态分布(normality test)
基于最小二乘法和SVM从天气预报中预测太阳能发电量(Matlab代码实现)
自动化测试如何创造业务价值?