GraphQL
为了方便理解,这里从一个例子出发来理解GraphQL
通常情况下,当你想获取有关书籍和作者的详细信息时,用REST API的风格写为:
/api/books
/api/authors
如果用GraphQL的话,写成如下:
query GetBooks {
books{
title
author
}
}
结果如下:
上面这个例子中:
query是一种操作类型,GetBooks是一个任意的操作名称(你自己起的名字).
也可以进行查询嵌套:(如下所示)
query GetBooks {
books{
title
author{
friends {
phoneNumber
}
}
}
}
如果后端有相关信息就可以查到信息
其他几个常见的基础知识
ARGUMENTS:
{
human(id: "1000") {
name
height
}
}
#响应
{
"data": {
"human": {
"name": "Luke Skywalker",
"height": 1.72
}
}
}
这里的语法允许你对结果进行过滤。(查找id为1000的人的相关信息)
ALIASES:
{
empireHero: hero(episode: EMPIRE) {
name
}
jediHero: hero(episode: JEDI) {
name
}
}
#响应
{
"data": {
"empireHero": {
"name": "Luke Skywalker"
},
"jediHero": {
"name": "R2-D2"
}
}
}
这里的语法允许你在响应的JSON中创建额外的字段。此处响应中两个字段中都有 “hero”。通过使用别名,可以将它们区分。实际上是 前缀+共有字段
的形式。
FRAGMENTS:
fragment NameParts on Person {
firstName
lastName
}
query GetPerson {
people(id: "7") {
...NameParts
avatar(size: LARGE)
}
}
#注意:上面与下面是等价的
query GetPerson {
people(id: "7") {
firstName
lastName
avatar(size: LARGE)
}
}
类似于...xxx的形式就
表示fragments,作用就是使得某一字段可以被复用,从而避免每次都输入同一组字段
VARIABLES(变量):
# $episode: Episode -----> $变量:变量类型
query HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}
#变量赋值
# "变量":"具体的值"
{
"episode": "JEDI"
}
#响应
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{
"name": "Luke Skywalker"
},
{
"name": "Han Solo"
},
{
"name": "Leia Organa"
}
]
}
}
}
参考
https://www.apollographql.com/docs/react/data/fragments/
https://graphql.org/learn/queries/
https://www.youtube.com/watch?v=PQvux9OAaBE
以上为GraohQL基础知识,今天开个头,后面会继续
原文始发于微信公众号(迪哥讲事):漏洞赏金猎人笔记-GraphQL-I