使用Vue.js搭建GraphQL前端

项目简介

该项目仿照网站 swapi(The Star Wars API,提供了一组Restful Api来查询星球大战系列电影中的人物,飞船,星球等资源的详细信息),提供了基于GraphQL的查询服务。

项目地址:GraphQL Service

Restful vs GraphQL

传统的Restful API已经给我们带来了不少好处,例如易于维护和扩展,上面提到的 swapi便是一个熟悉Restful 的一个好例子。但在灵活性上还存在一定的不足,例如我们无法自定义需要获取的数据,或是在获取大量数据时不得不分多次请求:

// 调用 https://swapi.co/api/people/1的结果
{
	"name": "Luke Skywalker",
	"height": "172",
	"mass": "77",
	"hair_color": "blond",
	"skin_color": "fair",
	"eye_color": "blue",
	"birth_year": "19BBY",
	"gender": "male",
	"homeworld": "https://swapi.co/api/planets/1/",
	"films": [
		"https://swapi.co/api/films/2/",
		"https://swapi.co/api/films/6/",
		"https://swapi.co/api/films/3/",
		"https://swapi.co/api/films/1/",
		"https://swapi.co/api/films/7/"
	],
	"species": [
		"https://swapi.co/api/species/1/"
	],
	"vehicles": [
		"https://swapi.co/api/vehicles/14/",
		"https://swapi.co/api/vehicles/30/"
	],
	"starships": [
		"https://swapi.co/api/starships/12/",
		"https://swapi.co/api/starships/22/"
	],
	"created": "2014-12-09T13:50:51.644000Z",
	"edited": "2014-12-20T21:17:56.891000Z",
	"url": "https://swapi.co/api/people/1/"
}

通过调用/people/1我们获取了编号为1的people的信息,信息中还包含了跟该people相关的films,species等资源的链接,如果我们需要获取这些资源就不得不再次发送新的请求。另外我们也无法自定义返回的people对象包含的字段,无论我们所需要的字段是多少,api所返回的总是people的所有的字段。

但是通过GraphQL,我们可以像下面这样通过GraphQL查询语句准确地获取到我们所需的数据。

在这里插入图片描述

GraphQL的灵活性远不止于此,可以通过GraphQL官网直观了解更多强大特性!

前端

项目前端使用Vue.js搭建,主要实现了一个高级查询功能,支持用户自由设置参数,按需获取数据。项目主要包含三个界面(审美预警/捂脸):首页,登录界面,查询界面。

首页

在这里插入图片描述

首页基本上仿照了SWAPI的设计,提供了一个Restful API的基本操作界面:

在这里插入图片描述

在输入框输入api的路径即可获取查询结果。

作为对比,通过点击”GraphQL Service“跳转到基于GraphQL的查询界面体验GraphQL查询带来的方便(需要先登录,用户名:admin,密码:password)。

登录界面

在这里插入图片描述

查询界面

在这里插入图片描述

查询界面最顶端的”type“参数用于自定义希望获取的资源类型。之后的每个Filter框各对应一种资源的参数,用于指定希望获取到该资源的哪些字段。

另外还能够设置三种查询(query type):

  • ”Lookup“类型的查询按资源的id返回一个资源对象
  • ”Browse“类型的查询可以遍历多个资源,所需的参数为first(指定希望获取多少个资源实例),after(指定从哪个实例开始遍历)
  • ”Search"类型的查询除了可以指定first和after参数之外,还可以指定资源的name属性值,按name来查找资源

在各项设置设置完成后,滑动到页面低端,按REQUEST按钮即可自动生成对应的GraphQL查询语句,并发送查询请求。

例如进行如下设置:
在这里插入图片描述

生成的查询字符串为:

在这里插入图片描述

总结

限于对Vue还不够熟悉,前端总体有点粗糙。通过这次项目开发,我对GraphQL的了解加深了很多。GraphQL给前端的开发带来了不少好处,特别是其查询语句与返回结果形式上的一致性一定程度增加了用户友好性,前端的功能扩展会变的更加灵活。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 前端开发常用的语言除了 JavaScript 还有 HTML 和 CSS。 HTML (HyperText Markup Language) 用于描述网页内容,包括文本、图片、视频等。 CSS (Cascading Style Sheets) 用于定义网页的布局样式,包括字体、颜色、大小等。 JavaScript 是一种脚本语言,常用于网页交互、动态效果和后端通信等。 前端开发还常用到其他的技术,如框架 (如 React、Vue、Angular)、包管理工具 (如 npm、Yarn)、构建工具 (如 Webpack、Gulp) 等。 ### 回答2: 除了JavaScript,前端开发还涉及到以下语言: 1. HTML:前端的基础语言,用于搭建网页的结构和内容,负责定义元素和布局。 2. CSS:用于美化和布局网页的样式语言,负责定义网页的外观、字体、颜色、大小等。 3. TypeScript:是JavaScript的超集,提供了静态类型、面向对象编程等特性,可以增强代码的可读性和可维护性。 4. Sass/Less:是一种CSS预处理器,能够增加CSS的功能和灵活性,例如定义变量、嵌套规则、函数等。 5. Vue.js/Angular/React:这些是流行的前端框架,用于构建交互性强的单页应用(SPA)或组件化的界面。 6. jQuery:是一个简化HTML文档操作和事件处理的JavaScript库,使得前端开发更加便捷和高效。 7. Bootstrap:是一个开源的前端框架,提供了大量的样式和组件,可以快速搭建响应式网页设计。 8. GraphQL:是一种用于API数据查询和操作的查询语言,能够帮助前端开发者更高效地与后端交互。 9. WebAssembly:是一种低级的二进制格式,可以在浏览器中运行高性能的编译语言,如C/C++,提供了更快的执行速度。 除了这些语言,前端开发还需要熟悉常用的开发工具和技术,如版本控制(Git)、包管理器(npm / yarn)、构建工具(Webpack)以及浏览器调试工具等。 ### 回答3: 除了JavaScript,前端开发还可以使用以下语言: 1. HTML(Hypertext Markup Language):用于描述网页的结构和内容,定义了网页的各个元素如标题、段落、链接等。 2. CSS(Cascading Style Sheets):用于设计网页的外观和样式,包括字体、颜色、布局等。 3. TypeScript:是JavaScript的超集,添加了静态类型和其他语言特性,提供了更好的开发工具支持和代码维护能力。 4. Python:一种通用的高级编程语言,前端开发中可以用于处理后端逻辑、数据分析、机器学习等。 5. Sass(Syntactically Awesome Style Sheets):是一种CSS预处理器,提供了更强大的样式编写能力,如变量、嵌套、函数等。 6. Less:也是一种CSS预处理器,与Sass功能类似,可以提高CSS代码的可维护性。 7. Vue.js、React、Angular等前端框架:虽然不是语言,但它们可以帮助开发者更高效地构建复杂的JavaScript应用程序。 8. WebAssembly:一种二进制格式的程序语言,可以在浏览器中直接运行,提供了比JavaScript更高效的性能。 9. Java:虽然主要用于后端开发,但在前端开发中也可以通过Java Applets等技术实现一些交互效果。 10. Ruby:一种简洁、优雅的编程语言,用于网站开发和自动化构建工具等方面。 总而言之,除了JavaScript,前端开发者可以使用HTML、CSS、TypeScript等多种语言和工具来创建丰富、交互性高的网页应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值