Apollo Vue GraphQL 入門
介紹
Vue Js 是一個現(xiàn)代的 javascript 框架,在構(gòu)建 SPA 方面很流行。為了方便 Vue 開發(fā)者體驗(yàn),Vue Apollo 客戶端和狀態(tài)管理庫功能與服務(wù)器查詢語言 GraphQL 一起構(gòu)成了復(fù)雜的 UI。
在這篇博客中,我們使用了 Apollo Vue 框架和 Vue GraphQL 服務(wù)器來執(zhí)行完美的通信。在開始Apollo Vue GraphQL教程之前,讓我們了解一下基礎(chǔ)知識。
什么是 GraphQL?
2015 年,F(xiàn)acebook 發(fā)布了GraphQL,這是一種用于 Web API 的查詢語言,可以簡化前端和后端之間的通信。它由用于服務(wù)器的模式語言和用于客戶端的查詢語言組成。作為一個開放規(guī)范,任何人都可以將它與他們的版本框架一起使用。它可以與任何選擇的后端語言一起使用來創(chuàng)建有效的 GraphQL 服務(wù)器。
與 GraphQL 一起使用的一些流行框架有 Apollo、Hasura、GraphQL Yoga 等。使用 GraphQL 的好處是它使 API 快速、靈活,并且開發(fā)人員發(fā)現(xiàn)它易于使用。
什么是阿波羅?
Apollo 是最受歡迎的 GraphQL 框架,因?yàn)樗瑫r(shí)提供前端和后端解決方案。它提供了大量工具來將后端轉(zhuǎn)換為 GraphQL API,從而輕松地與前端交互。
為什么需要 Vue GraphQL?
GraphQL 服務(wù)于服務(wù)端,當(dāng)前端想要查詢或獲取數(shù)據(jù)時(shí),GraphQL 客戶端庫提供了解決方案,Vue GraphQL 就是一個這樣的解決方案。每個前端框架都有幾個這樣的庫。
Apollo Vue GraphQL 安裝過程
讓我們從使用 Apollo 客戶端框架將 GraphQL API 連接到 Vue Js 前端的過程開始。
第 1 步:使用 GraphQL 服務(wù)器創(chuàng)建 Vue Apollo
一開始創(chuàng)建一個項(xiàng)目文件夾,并在該文件夾內(nèi)使用下面的 package.json 文件創(chuàng)建 GraphQL 服務(wù)器。
包.json
“名稱”:'“graphgl服務(wù)器”,“版本”:“1.0.0”,“描述”: ””,“作者”: ””,> 調(diào)試“腳本”:{“開發(fā)”:“nodemon app.js”,"test": "echo \"Error: no test specified\" && exit 1"},“主要”:“index.js”,“依賴”:{
“cors”:“~2.8.5”,
“表達(dá)”:“?4.18.2”,
"express—-graphql": "70.12.00",
“nodemon”:“2.0.20”},“關(guān)鍵字”:[],“許可證”:“ISC”}
第 2 步:創(chuàng)建 App.js 文件
之后讓我們在同一個根文件夾中創(chuàng)建一個 app.js 文件。該 app.js 文件用于為數(shù)據(jù)庫創(chuàng)建模式。因此,您可以按照以下示例創(chuàng)建基本模式。
應(yīng)用程序.js
const express = require("快遞");const cors = require("cors");常數(shù) {
圖形化HTTP} = require("express-graphql");常數(shù) {
圖形QL對象類型,
GraphQLInt,
GraphQL字符串,
GraphQLList,
GraphQLSchema,
GraphQLNonNull,} = require("graphql");const app = express();app.use(cors());讓 userData = [{
編號:1,
名字:“約翰”,
姓氏:“母鹿”,
年齡:22
},
{
編號:2,
firstName: "馬克",
姓氏:“史密斯”,
年齡:30
},
{
編號:3,
名字:“羅伯特”,
lastName: "亨特",
年齡:35
},];const userType = new GraphQLObjectType({
名稱:“用戶”,
描述:“用戶詳細(xì)信息”,
字段:{
ID: {
類型:GraphQLNonNull(GraphQLInt),
},
名: {
類型:GraphQLNonNull(GraphQLString),
},
姓: {
類型:GraphQLNonNull(GraphQLString),
},
年齡: {
類型:GraphQLNonNull(GraphQLInt),
},
},});const rootQuery = new GraphQLObjectType({
名稱:“根查詢”,
描述:“這是根查詢”,
字段:{
用戶:{
類型:GraphQLList(用戶類型),
解析:() => 用戶數(shù)據(jù),
},
用戶:{
類型:用戶類型,
參數(shù):{
ID: {
類型:GraphQLInt
},
},
解析:(_, args) => userData.find((data) => data.id === args.id),
},
},});const rootMutation = new GraphQLObjectType({
名稱:“根突變”,
描述:“這是根突變”,
字段:{
添加用戶: {
類型:用戶類型,
參數(shù):{
名: {
類型:GraphQLNonNull(GraphQLString)
},
姓: {
類型:GraphQLNonNull(GraphQLString)
},
年齡: {
類型:GraphQLNonNull(GraphQLInt)
},
},
解決:(_,args)=> {
const 新用戶 = {
id: userData.length + 1,
名字:args.firstName,
姓氏:args.lastName,
年齡:args.age,
};
userData.push(newUser);
返回新用戶;
},
}
},});const schema = new GraphQLSchema({
查詢:根查詢,
突變:rootMutation});應(yīng)用程序。使用(
“/圖形”,
graphqlHTTP({
模式,
graphiql:是的,
}));常量端口 = 3001;app.listen(PORT, () => {
console.log(`監(jiān)聽端口 - ${PORT}`);});
創(chuàng)建 app.js 文件后,現(xiàn)在我們需要執(zhí)行npm install來安裝所有必需的依賴項(xiàng)。成功安裝所有依賴項(xiàng)后,我們需要運(yùn)行命令npm run dev來運(yùn)行 GraphQL 服務(wù)器。完成所有這些后,讓我們在同一根文件夾中創(chuàng)建一個 Vue 應(yīng)用程序。
準(zhǔn)備好使用 Apollo Vue GraphQL 將您的 Vue.js 開發(fā)技能提升到一個新的水平了嗎?
立即聘請熟練的Vue 開發(fā)人員,開始輕松構(gòu)建強(qiáng)大、靈活的 API。立即聯(lián)系我們開始吧!
第 3 步:創(chuàng)建 Vue 應(yīng)用程序
這里我們使用 Vue 3 創(chuàng)建我們的應(yīng)用程序,并確保您需要使用 v17 以下的節(jié)點(diǎn)版本。
現(xiàn)在導(dǎo)航到我們的應(yīng)用程序并運(yùn)行它。
成功運(yùn)行本地服務(wù)器后,它將顯示如下:
第 4 步:Apollo 客戶端完整配置
安裝這些包以集成Apollo Vue GraphQL。
npm install --save @vue/apollo-選項(xiàng)npm 安裝 --save @apollo/clientnpm 安裝 --save graphqlnpm 安裝 --save graphql-tag
還要安裝 react 以避免出現(xiàn)需要安裝“react”的錯誤。
上述依賴安裝后的 Vue3 package.json 文件。
第 5 步:創(chuàng)建 Apollo Provider
配置客戶端后,轉(zhuǎn)到 vue 應(yīng)用程序并在 src 文件夾中創(chuàng)建apollo.provider.js文件。
阿波羅.provider.js:
這里“InMemoryCache”從“@apollo/client”加載。使用“InMemoryCache”的原因是將 API 響應(yīng)存儲到緩存中,以便后續(xù)請求將從緩存中加載數(shù)據(jù),而不是一次又一次地調(diào)用 API。
“ApolloClient”從“@apollo/client”加載。在這里,我們必須傳遞諸如“緩存”和我們的 Graphql 端點(diǎn)之類的配置。
還定義了從“@vue/apollo-option”加載的“createApolloProvider”。
從“@apollo/client”導(dǎo)入{InMemoryCache,ApolloClient};從“@vue/apollo-option”導(dǎo)入{createApolloProvider};常量緩存 = 新的 InMemoryCache();const apolloClient = new ApolloClient({
緩存,
uri: "http://localhost:3001/graphql",});export const provider = createApolloProvider({默認(rèn)客戶端:apolloClient,});
在 apollo.provider.js 文件中添加以上代碼后,我們需要從“apollo-.provider.js”文件中導(dǎo)入apolloProvider并集成到 vue 實(shí)例中。
由于我們投資于 Apollo Vue GraphQL 教程,讓我們來看看需要熟悉 GraphQL 的一些關(guān)鍵點(diǎn)。
詢問:
查詢用于從 GraphQL 端點(diǎn)獲取數(shù)據(jù)。
在“graphql.js”下方,getAllUsers 查詢從 GraphQL 端點(diǎn)獲取所有用戶數(shù)據(jù)。
使用參數(shù)查詢:
如果我們想將動態(tài)值傳遞給我們的查詢,我們使用“變量”的概念。使用變量我們可以傳遞查詢參數(shù)。在下面的示例中,“getSingleUser”查詢“$id”是一個變量類型,其值由變量對象動態(tài)替換。
突變:
Mutation 是一種 GraphQL 操作,允許您在服務(wù)器端插入新數(shù)據(jù)或修改現(xiàn)有數(shù)據(jù)。您可以將 GraphQL Mutations 視為等同于 REST 中的 POST、PUT、PATCH 和 DELETE 請求。在下面的文件中,我們使用突變來添加用戶。
第 6 步:通過 GraphQL 添加查詢
現(xiàn)在,讓我們在 src 文件夾中創(chuàng)建一個 graphql.js 文件來添加查詢。為此,我們需要從“graphql-tag”導(dǎo)入 gql。
從“graphgl-tag”導(dǎo)入 agql;導(dǎo)出常量 getAllUsersQuery = gql
查詢用戶{
用戶{
ID
名
姓
年齡
}
};導(dǎo)出常量 getSingleUserQuery = gql°
查詢用戶($id:Int?。﹞
用戶(id:$id){
ID
名
姓
年齡
}
}
;export const addUserMutation = gql
mutation addUser($firstName: String!, $lastName: String!, $age: Int!) {
添加用戶(名字:$firstName,姓氏:$lastName,年齡:$age){
ID
名
姓
年齡
}
}
;
這樣做之后,讓我們看看如何在我們的組件中使用 GraphQL 查詢。為此,我們假設(shè)我們有getAllUser查詢,正如我們在 graphql.js 文件中定義的那樣。
所有用戶.vue
<模板>
<分區(qū)>
<div v-if="用戶">
<div v-for="用戶中的用戶">
{{ user.firstName }}
</div>
</div>
<div v-else>沒有找到用戶</div>
</div></模板>
為了通過 id 獲取 SingleUser,我們需要在查詢中提供一些參數(shù)。因此,為此讓我們假設(shè) SingleUser.vue 有一個組件。
單用戶.vue
<模板>
<分區(qū)>
<分區(qū)>
<h5>{{ user.firstName + " " + user.lastName }}</h5>
<p>年齡——{{ user.age }}</p>
</div>
</div></模板>
現(xiàn)在假設(shè)我們需要添加用戶,因此我們需要從我們已經(jīng)在上面的 graphql.js 文件中定義的 graphql.js 文件導(dǎo)入 addUserMutation。
添加用戶.vue
<模板><分區(qū)><form class="w-1/2 ml-auto mr-auto" @submit.prevent="addUser"><分區(qū)><div class="相對 z-0 w-full mb-6 組"><input type="text" v-model="fname" name="floating_company" id="floating_company" 占位符</div></div><分區(qū)><div class="相對 z-@w-full mb-6 組"<input type="text" v-model="lname" name="floating_company" id="floating_company" placeholder="LastName" required /></div></div><分區(qū)><div class="相對 z-0 w-full mb-6 組"><input type="text" v-model.number="age" name="floating_company" id="floating_company" placeholder="Age" required /></div></div><button type="submit">提交</button></表格></div></模板>
總的來說,您可以在 Vue Apollo 的幫助下使用 GraphQL 創(chuàng)建任何 Vue 項(xiàng)目。
結(jié)論
我們希望上面的 Apollo Vue GraphQL 示例教程對解決您的查詢有用,并讓您對使用客戶端 Apollo 和 Vue 3 GraphQL 有基本的了解。要訪問有關(guān) Vue Js 的更多此類有見地的教程,請查看我們的Vue 教程。
(言鼎科技)