共计 1728 个字符,预计需要花费 5 分钟才能阅读完成。
GraphQL 势不可挡,有着即将取代 REST 的 API 架构。主要好处就是“你要什么,api 就给你什么。而不是你要不要都给你返回一大堆没用的。”
而且:GraphQL 只需要一个网址 URL!
https://api.github.com/graphql
不像 REST,你需要各种各有的 URL 去申请不同的内容。GraphQL 一个 URL 全够了。而且一般不是很复杂的情况下,你几乎只要 request 一次这个地址,就能拿到你全部需要的数据了(能按照你的需求返回给你各种嵌套的、格式化的数据)
网上看了很多文章解释之后发现还是什么都没懂。所以这篇分享不打算按照常规路线,先用一大堆结构图、语法给你弄懵。这里我想先让它运作起来,有个 ”Hello world”,然后再去深究背后的逻辑和语法。
初试 GraphQL
要说去了解一个 API,最好的方式就是用 Postman 或 Insomnia 这种 REST 客户端去连接玩耍了,不需要任何编程,只是手动点一点就 ok。
”有意思“的是,因为 GraphQL 太新潮,这两大客户端对它的支持各不相同,使用的参数、格式也大相径庭。下面通过最简单的案例总结一下。
Insomnia 访问 Github GraphQL 的案例
Insomnia 对 GraphQL 的支持相当好,可以说已经领先别人一步。以下为操作步骤:
新建 request,设置为 POST 方式访问 https://api.github.com/graphql
申请授权认证:
Github 的 API v4 不能陌生访问,必须使用自己的账号申请一个 token 密码串,然后在每次连接 API 时使用。操作很简单,登录 Github 后,找到 Settings -> Developer settings -> Personal access tokens -> Generate new token,生成一个新的 token 授权密码串,复制保存到本地备份。
添加授权认证:
在 Insomnia 软件里,有两种授权方式都可以达到同样认证效果:明文的 Query 参数里设置(即在 url 后面加上参数),或者 Header 表头里设置。Query 里设置的话,格式为:?access_token=xxxxxxxxxxxHeader 里设置的话,格式是:名称为 Authorization,值为 token xxxxxxxxxx。
在栏目里面的 Body 位置选择 GraphQL 格式:
输入 Github 指定格式的查询语句(看似 JSON 格式实则不是):
query {
viewer {
login
}
}
点击 Send 发送请求,如果一切正常,则会得到查询的返回值:
Postman 访问 GraphQL 失败
不像 Insomnia,Postman 暂时没有支持 GraphQL 的选项,但是可以通过类似的操作达到一样的效果。流程是一样的,只是每个地方设置格式都不同,这也是我不断尝试才找到的总结方案(可惜网上相关教程太少)。
这里只说不同的地方吧:
授权比 Insomnia 多一种方式,可以在 Authorization 栏目里面直接选 OAuth 2.0 然后输入 token 密码串。
最重要的是 Body 部分,查询语句完全不能使用 Github 指定的格式。只能选择 Body 格式为 Raw -> JSON(application/json)。然后加上查询语句,格式如下(必须完全符合 JSON 语法):
{
“query”: “query {viewer { login} }”
}
GitHub GraphQL Explorer
这个是 Github 制作的网页练习机,免去了一切授权等处理,让你只专注于查询语句的调用练习。每次点击运行,都会实时返回对应的数据。如果记不住的、不懂的,还可以点击旁边的 Docs,会显示出一个搜索框,显示你需要的内容的文档。
GraphQL API Explorer | GitHub Developer Guide
常用查询结构
下面展示一些我测试过的查询结构,希望能起到帮助作用。为了增强阅读性,节省文字长度,返回值就先不粘上来了。而且返回值几乎就是查询语句的结构,没什么特别新鲜的。
查询指定的 repo 中的 issues 和 comments
其中指定了某一个 repo(通过 owner 和 name 指定),也指定了某一条 issue(通过 number 指定),并要求返回最近的 10 条 comments。