JS前端可視化GraphQL使用詳解
正文
了解事物幕后的運作方式往往有好處,但并非總是如此。 因為不必使事情過于復(fù)雜。而可視化圖形界面在處理這么一個場景中,是首當(dāng)其沖的。
在本文中,我將帶你了解如何使用 GraphiQL 來輔助 GraphQL 的開發(fā)。
什么是 GraphQL?
在我們談?wù)?GraphiQL 之前,讓我們先談?wù)?GraphQL。
GraphQL 是一種用于應(yīng)用程序編程接口 (API) 的開源數(shù)據(jù)查詢和操作語言,也是一種使用現(xiàn)有數(shù)據(jù)完成查詢的運行時。
GraphQL 于 2012 年由 Facebook 內(nèi)部開發(fā),然后于 2015 年向公眾發(fā)布。
與 REST方法相比,開發(fā)人員更喜歡它,但本篇文章我們不會關(guān)注關(guān)于 RESTful 方法和 GraphQL 的優(yōu)缺點的比較。
什么是 GraphiQL?
現(xiàn)在,如果你熟悉 RESTful API,你可能會知道 Postman 和 Insomnia 之類的工具,因為它們不僅可以幫助我們快速可視化 API 開發(fā),還可以幫助我們更快地完成工作。
同樣,你可以將 GraphiQL 視為 Postman 或 Insomnia。 因為 GraphiQL 是 GraphQL 集成開發(fā)環(huán)境 (IDE)。
它這是一個強(qiáng)大的工具,可以幫助你直觀地構(gòu)建 GraphQL 查詢的工具。
在我們開始學(xué)習(xí)之前,希望你具備以下知識:
- 對 Node.js, npm 有基本了解;
- 了解基本的 express.js 搭建服務(wù)器的設(shè)置;
開始
我們正在構(gòu)建一個 express.js 服務(wù)器,它是一個 Node.js 函數(shù)并將其放入變量的地方;應(yīng)用程序。
現(xiàn)在,我們將創(chuàng)建一個文件夾來存放我們的項目文件。
進(jìn)入新創(chuàng)建或所需的文件夾后,在命令行界面 (CLI) 上運行它:
npm init -y
這將在你所在的文件夾中創(chuàng)建一個 package.json 文件。
接下來要做的是安裝我們項目所需的依賴包。 運行:
npm install graphql express-graphql express。
你應(yīng)該將 "dev": "node app.js" 添加到 package.json 文件中的 script 對象中:
script: {
"dev": "node app.js"
}
安裝完成后,你的 package.json 文件應(yīng)如下所示:

因為 express.js 不知道 如何與 graphql 進(jìn)行通信,所以我們安裝了 express-graphql 依賴包。
接著,在你的文件夾中,創(chuàng)建一個名為 app.js 的文件并填入以下代碼:
//app.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 函數(shù)并將其賦值給 app 這個常量。
從第 7 行到第 10 行,我們首先調(diào)用 app.use(),它允許我們在 express.js 中注冊中間件。
每當(dāng)我們點擊路由 /graphql 時,它始終會調(diào)用 graphqlHTTP() ,并添加對象。
我們希望能夠以圖形方式看到正在發(fā)生的事情,因為我們給 graphiql 一個“true”值。
現(xiàn)在,在項目的文件夾中創(chuàng)建一個文件夾。然后在剛剛創(chuàng)建的文件夾中,創(chuàng)建一個名為 “schema.js” 的文件。
將以下代碼填入到 schema.js 文件中:
// schema.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 文件夾中,我們需要創(chuàng)建一個名為 country.js 的文件并填入以下代碼:
const countries = [
{ name: 'Portugal', capital: 'Libson', id: '1' },
{ name: 'Canada', capital: 'Ontario', id: '2' },
{ name: 'Nigeria', capital: 'Abuja', id: '3' },
];
module.exports = {countries};
最后,你的項目文件夾應(yīng)如下所示:

現(xiàn)在,回到 schema/schema.js。
從第 2 行到第 5 行,我們導(dǎo)入 schema/country.js 的內(nèi)容,該內(nèi)容的結(jié)構(gòu)與 GraphQL 服務(wù)器所需的內(nèi)容結(jié)構(gòu)是保持一致的。
從第 6 行到第 13 行,變量 CountryType 由來自 graphql 的 GraphQLObjectType() 方法實例化。 其中有兩個屬性:name 和 fields。
name 的值為 “Country”,其中作為屬性的字段也是一種隱式返回對象(id; name capital)的方法。
從第 14 行到第 25 行,我們有一個新的 GraphQLObjectType() 實例,它被放在變量 RootQuery 中。 我們看到我們正在使用 Loadash 通過 id 返回 countries。
如果一切都正確完成,你應(yīng)該能夠在 GraphiQL 界面中運行你的 GraphQL。
運行 npm run dev:
然后,在你的瀏覽器中,轉(zhuǎn)到 http://localhost:2020/graphql,你應(yīng)該會看到:

是的,現(xiàn)在你可以使用 GraphiQL 界面測試你的 API。 你可以嘗試通過在瀏覽器中粘貼以下內(nèi)容來獲取我們 country.js 中 id 為 1 的 name 和 capital:
{
country(id: 1) {
name
capital
}
}
完成此操作后,點擊“Play”圖標(biāo),你應(yīng)該會在屏幕的另一側(cè)看到如下響應(yīng):

結(jié)尾
現(xiàn)在,我們已經(jīng)完成了關(guān)于如何使用 GraghQL 的默認(rèn)可視化工具 GraphiQL 可視化你的 GraphQL 模式的教程。
我們也已經(jīng)看到 GraphQL 提供了一種很好的方法來查詢 API 中的某些內(nèi)容。
以上就是JS前端可視化GraphQL使用詳解的詳細(xì)內(nèi)容,更多關(guān)于JS前端可視化GraphQL的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序 定位到當(dāng)前城市實現(xiàn)實例代碼
這篇文章主要介紹了微信小程序 定位到當(dāng)前城市實現(xiàn)實例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
超越Node.js的JavaScript運行環(huán)境Bun.js功能特性詳解
這篇文章主要為大家介紹了超越Node.js的JavaScript運行環(huán)境Bun.js功能特性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
微信小程序 wxapp內(nèi)容組件 icon詳細(xì)介紹
這篇文章主要介紹了微信小程序 wxapp內(nèi)容組件 icon詳細(xì)介紹的相關(guān)資料,并附簡單實例,需要的朋友可以參考下2016-10-10
詳解微信小程序如何實現(xiàn)類似ChatGPT的流式傳輸
這篇文章主要為大家介紹了微信小程序如何實現(xiàn)類似ChatGPT的流式傳輸示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Web應(yīng)用開發(fā)TypeScript使用詳解
這篇文章主要為大家介紹了Web應(yīng)用開發(fā)TypeScript的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

