最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS前端可視化GraphQL使用詳解

 更新時間:2022年08月02日 09:55:01   作者:前端修羅場  
這篇文章主要為大家介紹了JS前端可視化GraphQL使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

了解事物幕后的運作方式往往有好處,但并非總是如此。 因為不必使事情過于復(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)文章

  • js類型判斷內(nèi)部實現(xiàn)原理示例詳解

    js類型判斷內(nèi)部實現(xiàn)原理示例詳解

    這篇文章主要為大家介紹了js類型判斷內(nèi)部實現(xiàn)原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 前端算法題解?leetcode50-Pow(x,?n)

    前端算法題解?leetcode50-Pow(x,?n)

    這篇文章主要為大家介紹了前端算法題解?leetcode50-Pow(x,?n)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • electron?中?webview的使用示例解析

    electron?中?webview的使用示例解析

    這篇文章主要為大家介紹了electron?中?webview的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • JS前端畫布與組件元信息數(shù)據(jù)流示例詳解

    JS前端畫布與組件元信息數(shù)據(jù)流示例詳解

    這篇文章主要為大家介紹了JS前端畫布與組件元信息數(shù)據(jù)流示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • JavaScript前端構(gòu)建工具原理的理解

    JavaScript前端構(gòu)建工具原理的理解

    這篇文章主要為大家介紹了JavaScript前端構(gòu)建工具原理的理解分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • javascript使用btoa和atob來進(jìn)行Base64轉(zhuǎn)碼和解碼

    javascript使用btoa和atob來進(jìn)行Base64轉(zhuǎn)碼和解碼

    javascript原生的api本來就支持,Base64,但是由于之前的javascript局限性,導(dǎo)致Base64基本中看不中用。當(dāng)前html5標(biāo)準(zhǔn)正式化之際,Base64將有較大的轉(zhuǎn)型空間,對于Html5 Api中出現(xiàn)的如FileReader Api, 拖拽上傳,甚至是Canvas,Video截圖都可以實現(xiàn)
    2017-03-03
  • 前端框架arco?table源碼遇到的問題解析

    前端框架arco?table源碼遇到的問題解析

    這篇文章主要為大家介紹了前端框架arco?table源碼遇到的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 微信小程序引用公共js里的方法的實例詳解

    微信小程序引用公共js里的方法的實例詳解

    這篇文章主要介紹了微信小程序引用公共js里的方法的實例詳解的相關(guān)資料,這里提供了實現(xiàn)的方法,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • axios進(jìn)度條onDownloadProgress函數(shù)total參數(shù)undefined解決分析

    axios進(jìn)度條onDownloadProgress函數(shù)total參數(shù)undefined解決分析

    這篇文章主要介紹了axios進(jìn)度條onDownloadProgress函數(shù)total參數(shù)undefined解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Typescript?封裝?Axios攔截器方法實例

    Typescript?封裝?Axios攔截器方法實例

    這篇文章主要為大家介紹了Typescript?封裝?Axios攔截器方法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評論

通化县| 资源县| 金乡县| 永泰县| 宝山区| 晋江市| 鄱阳县| 绥中县| 灵丘县| 罗城| 太仆寺旗| 鹰潭市| 阳新县| 嘉兴市| 昌平区| 天等县| 三门峡市| 雅安市| 定远县| 玉环县| 麟游县| 纳雍县| 阿鲁科尔沁旗| 汉沽区| 涟源市| 锡林郭勒盟| 徐水县| 惠安县| 金沙县| 农安县| 云南省| 巍山| 桐城市| 岑巩县| 顺昌县| 武乡县| 乐昌市| 平利县| 德清县| 铜陵市| 内黄县|