Vue中对接Graphql的实践 ----- Vue Apollo

用户头像
北京/UI设计师/3年前/141浏览
Vue中对接Graphql的实践 ----- Vue Apollo

Vue Apollo是一个集成Apollo和Graphql的Vue组件,让你在Vue.js应用中集成Graphql。


Graphql与Vue Apollo简介/


当 Facebook 构建 GraphQL 时,他们需要一个功能强大的数据获取 API,该 API 可以处理 Facebook 的所有任务,使其产品开发人员的学习和使用简单易行。 GraphQL 是一种描述与业务相关的数据模型的查询语言。 对于前端来讲,Graphql api作为API的网关,获取任何类型的数据都可以统一使用Graphql,再由Graphql与后端通信获取,后端解释之后,以JSON格式返回给前端。Vue Apollo是一个集成Apollo和Graphql的Vue组件,让你在Vue.js应用中集成Graphql。



为什么使用Graphql /


与REST相比,Graphql具有以下优点:


没有过度获取和获取不足的问题

没有过度获取和获取不足的问题,REST响应包含太多数据或有时数据不足,这会产生对另一个请求的需求。Graphql可以通过在单个请求中仅获取准确和特定的数据来解决这个问题。

适合复杂系统和微服务

GraphQL 的 API 后面可集成多个系统, 它统一了它们并隐藏了它们的复杂性。 GraphQL 服务器还用于从现有系统中获取数据并将其打包为 GraphQL 响应格式。 这对于规模庞大且难以维护和处理的遗留基础设施或第三方 API 最为有利;当我们必须从单体后端应用程序迁移到微服务架构时,GraphQL API 可以通过将多个微服务合并到一个 GraphQL 模式来帮助我们处理它们之间的通信。

强类型

GraphQL是一种强类型语言,其中 GraphQL 查询的每个级别对应特定类型,并且每个类型描述一组可用字段。


Vue Apollo快速入门 /


安装

npm install --save vue-apollo graphql apollo-client apollo-link apollo-link-http apollo-cache-inmemory graphql-tag

新建apollo..js


import { ApolloClient, createHttpLink, InMemoryCache, split,} from "@apollo/client/core";import { WebSocketLink } from "@apollo/client/link/ws";import { getMainDefinition } from "@apollo/client/utilities";​export const newApolloClient = (httpUri: string, wsUri: string): any => { // 与 API 的 HTTP 连接 const httpLink = createHttpLink({ // 你需要在这里使用绝对路径 uri: httpUri, });


// 创建订阅的 websocket 连接 const wsLink = new WebSocketLink({ uri: wsUri, options: { reconnect: true, }, });


// 使用分割连接的功能 // 你可以根据发送的操作类型将数据发送到不同的连接 const link = split( // 根据操作类型分割 ({ query }) => { const definition = getMainDefinition(query); return ( definition.kind === "OperationDefinition" && definition.operation === "subscription" ); }, wsLink, httpLink );


// 缓存实现 const cache = new InMemoryCache({ addTypename: false });


// 创建 apollo 客户端 return new ApolloClient({ link: link, cache, });};

在main.ts中添加


import { newApolloClient } from "./utils/apolloClient";
new Vue({ router, store, provide() { return { [DefaultApolloClient]: newApolloClient( aesDecrypt(res.httpLinkUri), aesDecrypt(res.wsLinkUri) ), }; }, render: (h) => h(App), }).$mount("#app");

在根目录下创建vue.config.js文件


module.exports = { chainWebpack: (config) => { // GraphQL Loader config.module .rule("graphql") .test(/\.(graphql|gql)$/) .use("graphql-tag/loader") .loader("graphql-tag/loader") .end(); }, productionSourceMap:false,};

写接口


export const getAlertsInfo = gql` query getAlertsInfo { AlertDefinitions { AlertDefinition { id cluster_name service_name label } } AlertSummaryGrouped { definition_id definition_name summary } }`;

在组件函数中使用


const { result: alertsInfo } = useQuery(getAlertsInfo, null, { enabled: false, fetchPolicy: "no-cache", });


2
举报
|
2
分享
相关推荐
评论
用户头像
评论你的想法~
表情
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
推荐素材
高级感金属拟物 UI设计组件库
UI界面 组件
APP/小程序商业项目UI模板|99个高保真UI+79个原型
3D渐变流体抽象矢量UI背景图
【新年UI图标】积分icon
【新年UI图标】银行卡icon
智能家居中心 简约 UI设计组件库
【新年UI图标】活动icon
我的钱包-UI界面设计-app
UI应用平面图标
UI 登录界面设计模板包
科技医疗透明柜UI界面设计
【新年UI图标】美食icon
户外旅行飞机情侣假日出行
钱包ui模板
【新年UI图标】旅行icon
新能源APP应用UIKit
盲盒APP UI设计
Security Camera UI kit
【新年UI图标】礼物/活动icon
森系3D渐变流体抽象矢量UI背景图
高级表盘系列UI源文件
手表表盘UI系列
原创UIUX交互橙红渐变炫酷视觉平面设计作品集模板PSD
你可能喜欢
相关收藏夹
地产VI
地产VI
地产VI
地产VI
大家都在看
登录注册