您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

GraphQL 使用介绍

时间:2019-09-04 11:17:42  来源:  作者:
GraphQL 使用介绍

 

GraphQL 是 Fackbook 的一个开源项目,它定义了一种查询语言,用于描述客户端与服务端交互时的数据模型和功能,相比 RESTful API 主要有以下特点:

  • 根据需要返回数据
  • 一个请求获取多个资源
  • 提供内省系统

这使得客户端的功能得到了加强,特别是在查询数据方面。

下面我们从使用的角度来介绍一下。

相关概念

在使用 GraphQL 之前,先介绍几个相关概念,便于理解使用。

  • Operations

GraphQL 服务提供的操作一般有:query、mutation。query 可以理解为 RESTful API 中的 GET 的请求。mutation 可以理解为 RESTful API 中的 POST、PUT、DELETE 之类的请求。

  • Types

定义了 GraphQL 服务支持的类型,例如:

type User {
 id: ID
 name: String
}
type Query {
 user: User
}

定义了 User 类型和包含的字段以及字段的类型;定义 Query 返回一个 User 类型的 user,Query 也是一种类型。

  • Scalar types

标量类型。GraphQL 默认提供的标量类型有:Int、Float、String、Boolean、ID,也可以实现自定义的标量类型,如:Date。

标量类型有什么用呢?返回数据的字段必须是标量类型。例如我们想返回一个 user:

query {
 user // 报错
}

上面这样是会报错的,因为 user 不是标量类型,需要改成

query {
 user {
 id
 name
 }
}

指定返回 user 的 id 和 name,这两个字段都是标量类型,就可以正确返回了。

开始使用

如果看完上面的介绍,心中有很多疑问,没关系,我们现在以 GitHub GraphQL API 为例,来实际使用一下。打开 https://developer.github.com/v4/explorer/,然后登录,会看到一个这样的界面

GraphQL 使用介绍

 

这是 GraphQL 提供的开发工具 GraphiQL,可以检查 GraphQL 的语法,发送 GraphQL 的请求,还提供文档查询功能。在开始使用之前先介绍一下文档查询功能。点击右上角的 < Docs 并可以看到

GraphQL 使用介绍

 

上面的 ROOT TYPES 表示最顶层支持的类型,只有两个 Query 和 Mutation。点击 Query,可以看到该类型包含的字段。仔细看,会发现这些字段的值又都是类型。

GraphQL 使用介绍

 

往下滚动,找到 user(login: String!): User,点击 User

GraphQL 使用介绍

 

终于找到一个标量类型的字段 bio: String,按照之前说法,我们是可以查询这个字段,写出如下的查询语言:

{
 user {
 bio
 }
}

准备执行时,会看到 user 下方有条红线,鼠标放上去

GraphQL 使用介绍

 

提示 user 必须指定一个 login 的参数,再回头看文档中该字段的描述 user(login: String!): User,是不是就可以理解了,(login: ) 表示该字段接受一个 login 参数,为 String 类型,! 表示是必须的。

将查询语言改成:

{
 user(login: "booxood") {
 bio
 }
}

再执行,并得到了我们预期指定的结果

{
 "data": {
 "user": {
 "bio": "HAppy coding & Happy life"
 }
 }
}

现在是不是有点理解这种查询语言了。下面我们再以【 Gitalk:一个基于 Github Issue 和 Preact 开发的评论插件】中的两个需求为例

  • 展示某个 Issue 的评论和评论上的点赞数据
query {
 repository(owner: "gitalk", name: "gitalk") {
 issue(number: 1) {
 comments(last: 10) {
 totalCount
 nodes {
 author {
 login
 avatarUrl
 }
 body
 reactions(first: 100, content: HEART) {
 totalCount
 viewerHasReacted
 }
 }
 }
 }
 }
}

先通过 repository(owner: "gitalk", name: "gitalk") 找到 repository,再通过 issue(number: 1) 指定 issue,然后 comments(last: 10) 表示从后面取 10 条 comments,同时获取评论的 body 和 评论的 reactions(first: 100, content: HEART) 以及 reactions 的相关信息。

  • 添加或取消某个评论上的点赞

添加

mutation {
 addReaction(input: {subjectId: "MDEyOklzc3VlQ29tbWVudDMxNTQxOTc2NQ==", content: HEART}) {
 reaction {
 content
 }
 }
}

取消

mutation {
 removeReaction(input: {subjectId: "MDEyOklzc3VlQ29tbWVudDMxNTQxOTc2NQ==", content: HEART}) {
 reaction {
 content
 }
 }
}

之前的都是查询,这两个是 mutation,分别调用了 addReaction 和 removeReaction。

可以在从文档的 ROOT TYPE 上选择 Mutation 查看支持的所有 mutation。

希望本文能帮助到您!

点赞+转发,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓-_-)

关注 {我},享受文章首发体验!

每周重点攻克一个前端技术难点。更多精彩前端内容私信 我 回复“教程”

原文链接:https://aotu.io/notes/2017/12/15/graphql-use/

作者:凹凸实验室



Tags:GraphQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在这篇文章,我们将讨论一些各种 GraphQL 部署和迁移的安全风险,这些安全风险在客户管理过程中被发现。我们会讨论比较常见的高风险权限漏洞,以及不太常见的服务端请求伪造(SSRF)...【详细内容】
2020-10-23  Tags: GraphQL  点击:(90)  评论:(0)  加入收藏
GraphQL 是 Fackbook 的一个开源项目,它定义了一种查询语言,用于描述客户端与服务端交互时的数据模型和功能,相比 RESTful API 主要有以下特点: 根据需要返回数据 一个请求获取...【详细内容】
2019-09-04  Tags: GraphQL  点击:(244)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条